MissingMethodException使用Csvhelper时UseExcelLeadingZerosFormatForNumerics =在c#中的真正的configuration

我正在使用Csvhelper(版本2.16)将logging写入csv文件。

https://joshclose.github.io/CsvHelper/#getting-started

当生成的csv文件以excel格式打开时,我想保持前导零,所以我在编写csv文件时使用了UseExcelLeadingZerosFormatForNumerics = trueconfiguration。

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 } } } 

但是会抛出以下exception

未find方法:'Void CsvHelper.Configuration.CsvConfiguration.set_UseExcelLeadingZerosFormatForNumerics(Boolean)'。

这里可能是什么问题?

谢谢,Amol

一个MissingMethodException几乎总是意味着你的应用程序正在使用一个不同版本的程序集,而不是用来编译的程序集。

在这种情况下,发生这种情况的原因是由主应用程序引用的另一个项目使用CsvHelper库的旧版本,该属性不存在,因此未find其getter方法。

确保解决scheme中的所有项目都引用相同版本的库,所以它的程序集将不会被生成的旧版本覆盖。

用简单的数据进行testing,并按预期工作:

  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

一个string,=“00001”

它可能是您的部署环境中CsvHelper.dll的不匹配版本?