在c#中使用Csvhelper UseExcelLeadingZerosFormatForNumerics = true配置时出现MissingMethodException

时间:2016-09-23 09:44:43

标签: c# excel csv 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
                        }
                    }
                }

但它会抛出异常

找不到方法: &#39; Void CsvHelper.Configuration.CsvConfiguration.set_UseExcelLeadingZerosFormatForNumerics(Boolean)&#39;。

这可能是什么问题?

感谢, AMOL

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

使用简单数据进行测试并按预期工作:

 $estadoEquip   =   $_POST['estadoRep'];

    $max = sizeof($estadoEquip);
    for ($i=0; $i<$max; $i++) {
      if ($estadoEquip[$i] = 'Ended')
      $status= 'Concluded';

      if ($estadoEquip[$i] != 'Ended')
      $status= 'Pending'; 

    }}

输出是:

字段1,字段2

一个字符串,=&#34; 00001&#34;

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

答案 2 :(得分:0)

我通过整合我的 NuGet 包解决了这个问题。此处列出的 CsvHelper 版本不一致。