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的不匹配版本?