在 C# 中使用 Csvhelper UseExcelLeadingZerosFormatForNumerics =true 配置时出现 MissingMethodException
MissingMethodException while using Csvhelper UseExcelLeadingZerosFormatForNumerics =true configuration in c#
我正在使用 Csvhelper(2.16 版)将记录写入 csv 文件。
https://joshclose.github.io/CsvHelper/#getting-started
我想在以 excel 格式打开生成的 csv 文件时保留前导零,
所以我在编写 csv 文件时使用了 UseExcelLeadingZerosFormatForNumerics= true 配置。
using (SqlDataReader dataReader = sqlHelper.ExecuteReader(sqlQuery, parameters))
{
using (StreamWriter writer = new StreamWriter(csvfilepathTowrite))
{
CsvConfiguration config = new CsvConfiguration
{
UseExcelLeadingZerosFormatForNumerics = true
};
var csv = new CsvWriter(writer, config);
if (dataReader != null)
{
for (var i = 0; i < dataReader.FieldCount; i++)
{
csv.WriteField(dataReader.GetName(i));
}
csv.NextRecord();
while (dataReader.Read())
{
for (var i = 0; i < dataReader.FieldCount; i++)
{
csv.WriteField(dataReader[i]);
}
csv.NextRecord();
}
}
else
{
//exception
}
}
}
但它抛出以下异常
未找到方法:
'Void CsvHelper.Configuration.CsvConfiguration.set_UseExcelLeadingZerosFormatForNumerics(Boolean)'.
这可能是什么问题?
谢谢,
阿莫尔
使用简单数据进行测试并按预期工作:
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 版本不匹配吗?
MissingMethodException 几乎总是意味着您的应用程序 运行 使用的程序集版本与用于编译它的程序集版本不同。
在这种情况下,这是因为您的主应用程序引用的另一个项目使用了旧版本的 CsvHelper 库,其中 属性 不存在,因此其 getter 方法不存在找不到。
确保解决方案中的所有项目都引用相同版本的库,这样它的程序集就不会在构建时被旧版本覆盖。
我通过整合我的 NuGet 包解决了这个问题。此处列出的 CsvHelper 版本不一致。
我正在使用 Csvhelper(2.16 版)将记录写入 csv 文件。
https://joshclose.github.io/CsvHelper/#getting-started
我想在以 excel 格式打开生成的 csv 文件时保留前导零, 所以我在编写 csv 文件时使用了 UseExcelLeadingZerosFormatForNumerics= true 配置。
using (SqlDataReader dataReader = sqlHelper.ExecuteReader(sqlQuery, parameters))
{
using (StreamWriter writer = new StreamWriter(csvfilepathTowrite))
{
CsvConfiguration config = new CsvConfiguration
{
UseExcelLeadingZerosFormatForNumerics = true
};
var csv = new CsvWriter(writer, config);
if (dataReader != null)
{
for (var i = 0; i < dataReader.FieldCount; i++)
{
csv.WriteField(dataReader.GetName(i));
}
csv.NextRecord();
while (dataReader.Read())
{
for (var i = 0; i < dataReader.FieldCount; i++)
{
csv.WriteField(dataReader[i]);
}
csv.NextRecord();
}
}
else
{
//exception
}
}
}
但它抛出以下异常
未找到方法: 'Void CsvHelper.Configuration.CsvConfiguration.set_UseExcelLeadingZerosFormatForNumerics(Boolean)'.
这可能是什么问题?
谢谢, 阿莫尔
使用简单数据进行测试并按预期工作:
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 版本不匹配吗?
MissingMethodException 几乎总是意味着您的应用程序 运行 使用的程序集版本与用于编译它的程序集版本不同。
在这种情况下,这是因为您的主应用程序引用的另一个项目使用了旧版本的 CsvHelper 库,其中 属性 不存在,因此其 getter 方法不存在找不到。
确保解决方案中的所有项目都引用相同版本的库,这样它的程序集就不会在构建时被旧版本覆盖。
我通过整合我的 NuGet 包解决了这个问题。此处列出的 CsvHelper 版本不一致。