使用Csvhelper时MissingMethodException UseExcelLeadingZerosFormatForNumerics =在c#中的真实配置

问题描述:

我使用Csvhelper(版本2.16)将记录写入csv文件。使用Csvhelper时MissingMethodException UseExcelLeadingZerosFormatForNumerics =在c#中的真实配置

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

我想继续当生成CSV文件以Excel格式打开前导零, 所以我用UseExcelLeadingZerosFormatForNumerics =真正的配置,而写入csv文件。

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

但它抛出以下异常找不到

方法: '太虚CsvHelper.Configuration.CsvConfiguration.set_UseExcelLeadingZerosFormatForNumerics(布尔)'。

这里有什么问题?

感谢, 阿莫尔

+1

您部署了与用于编译的版本不同的CsvHelper版本。 – CodeCaster

+0

感谢CodeCaster。目前我正在调试Visual Studio应用程序没有部署。 – amol

+0

好吧,现在我已经更新了我的解决方案中的所有项目的csvhelper。现在错误消失了。谢谢!!! – amol

MissingMethodException几乎总是意味着您的应用程序正在使用与用于编译的程序集不同的程序集版本运行。

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

确保解决方案中的所有项目都引用相同版本的库,因此其构建程序不会被构建版本的旧版本覆盖。

+0

太棒了!谢谢!! – amol

用简单的数据测试,并如预期工作:

 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”

它可能是一个不匹配的版本的C您的部署环境中的svHelper.dll?