MissingMethodException при использовании Csvhelper UseExcelLeadingZerosFormatForNumerics = true конфигурации в c #

Я использую Csvhelper (версия 2.16) для записи записей в файл csv.

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

Я хочу сохранить ведущие нули при открытии сгенерированного файла csv в формате excel, поэтому я использовал конфигурацию UseExcelLeadingZerosFormatForNumerics = true при записи файла 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
                        }
                    }
                }

но он выдает следующее исключение

Метод не найден: 'Void CsvHelper.Configuration.CsvConfiguration.set_UseExcelLeadingZerosFormatForNumerics (Boolean)'.

В чем может быть проблема?

спасибо, Амол


person amol    schedule 23.09.2016    source источник
comment
Вы развернули версию CsvHelper, отличную от той, которая использовалась для компиляции.   -  person CodeCaster    schedule 23.09.2016
comment
Спасибо CodeCaster. В настоящее время я отлаживаю приложение Visual Studio, которое не развернуто.   -  person amol    schedule 23.09.2016
comment
Хорошо, теперь я обновил csvhelper для всех проектов в моем решении. теперь ошибка ушла. Спасибо!!!   -  person amol    schedule 23.09.2016
comment
Не могли бы вы добавить его в качестве ответа, чтобы я мог отметить его как ответ?   -  person amol    schedule 23.09.2016


Ответы (3)


MissingMethodException почти всегда означает, что ваше приложение работает с другой версией сборки, отличной от той, которая использовалась для ее компиляции.

В данном случае это произошло из-за того, что другой проект, на который ссылается ваше основное приложение, использовал более старую версию библиотеки CsvHelper, в которой этого свойства не было, и, следовательно, его метод получения не был найден.

Убедитесь, что все проекты в вашем решении ссылаются на одну и ту же версию библиотеки, чтобы ее сборки не были перезаписаны более старой версией при сборке.

person CodeCaster    schedule 23.09.2016

протестирован с простыми данными и работал как положено:

        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 в вашей среде развертывания?

person Bob Dust    schedule 23.09.2016

Я решил это, объединив свои пакеты NuGet. CsvHelper был указан там с несовместимыми версиями.

person CodingYourLife    schedule 04.06.2021