我正在使用 Csvhelper(版本 2.16)将记录写入 csv 文件。
https://joshclose.github.io/CsvHelper/#getting-started
我想在以 Excel 格式打开生成的 csv 文件时保留前导零, 所以我在编写 csv 文件时使用了 UseExcelLeadingZerosFormatForNumerics= true 配置。
using (SqlDataReader dataReader ){
CsvConfiguration config = new CsvConfiguration
{
UseExcelLeadingZerosFormatForNumerics = true
};
var csv = new CsvWriter(writer, config);
if (dataReader != null)
{
//Write to CSV
}
else
{
//exception
}
}
}
但它抛出以下异常
未找到方法: '无效 CsvHelper.Configuration.CsvConfiguration.set_UseExcelLeadingZerosFormatForNumerics(布尔值)'。
这里可能出现什么问题?
谢谢, 阿莫尔
MissingMethodException 几乎总是意味着您的应用程序正在使用与用于编译它的程序集不同版本的程序集运行。
在这种情况下,发生这种情况是因为主应用程序引用的另一个项目使用了旧版本的 CsvHelper 库,其中不存在该属性,因此找不到其 getter 方法。
确保解决方案中的所有项目都引用相同版本的库,这样其程序集就不会在构建时被旧版本覆盖。
使用简单数据进行测试并按预期工作:
var data = new Dictionary<string, object> {
{"Field1", "a string"},
{"Field2", "00001"}
};
using(var writer = new StringWriter())
{
var config = new CsvConfiguration { UseExcelLeadingZerosFormatForNumerics = true };
var csv = new CsvWriter(writer, config);
if(data != null)
{
foreach(var key in data.Keys)
{
csv.WriteField(key);
}
csv.NextRecord();
foreach (var key in data.Keys)
{
csv.WriteField(data[key]);
}
csv.NextRecord();
}
}
输出为:
字段1,字段2
一个字符串,=“00001”
是否是您的部署环境中的 CsvHelper.dll 版本不匹配?
我通过整合我的 NuGet 包解决了这个问题。 CsvHelper 在那里列出,版本不一致。
当应用程序在启用“修剪未使用的代码”设置的情况下发布时,可能会发生这种情况。
CSVHelper 不是修剪安全的,因此修剪器无法识别 CSVHelper 使用的部分模型类,并且可以删除它们(通常发生在默认构造函数中)。
要解决此问题,请将修剪器配置为不修剪组件。编辑您的项目文件并添加以下内容:
<PropertyGroup>
....
<TrimMode>partial</TrimMode>
</PropertyGroup>
<ItemGroup>
<TrimmerRootAssembly Include="MyAssembly" />
</ItemGroup>
更多信息: