バグを説明する
20.0.0では、オブジェクト初期化子を使用してCsvConfigurationを作成するか、「with」ステートメントを使用すると、MissingMethod例外がスローされます。
再現するには
予想される行動
オブジェクト初期化子を使用してCsvConfigurationを作成できます
スクリーンショット
追加のコンテキスト
ソース:
Temp.Lib:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>9.0</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CsvHelper" Version="20.0.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="IsExternalInit" Version="1.0.0" PrivateAssets="all" />
</ItemGroup>
</Project>
using CsvHelper.Configuration;
using System.Globalization;
namespace Temp.Lib
{
public static class ConfigCreator
{
public static CsvConfiguration CreateConfig() => new(CultureInfo.InvariantCulture) { Delimiter = ";" };
}
}
md5-c1177b2e3f8e3b3152d9b2f87ffae510
```csharp
using System;
using Temp.Lib;
namespace Temp
{
public static class Program
{
public static void Main()
{
ConfigCreator.CreateConfig();
Console.WriteLine("Config created successfully");
}
}
}
提案
たぶん、initのみのプロパティを持つレコードの代わりに、get onlyプロパティとオプションのコンストラクターパラメーターを持つレコードを使用しますか?
私はライブラリを使用して機能を古いバージョンに移行していました。 動作しないようです。 私はソースでそれをやっただけで、今はうまくいくようです。 これは、数時間以内にリリースされる次のバージョンに含めます。 私は人々がそれで見ている他の問題を修正したいと思います。
私は同じナゲットを使用しましたが、それを使って大規模なテストを行っていませんでした。 CsvConfigurationをレコードとして保持したい場合は、それを機能させてみてください。 initにnugetを使用せずに、プロジェクト内にソースコードディレクトリを配置して、クラスを内部にすることができます。
はい、私はそれを試しました、そしてあなたの例はそれでうまくいきます。 :)
ああ、すみません、あなたのコメントを読み間違えました。 迅速な対応と修正に感謝します!
21.0.0で修正する必要があります。 https://www.nuget.org/packages/CsvHelper/21.0.0