2016-12-14 2 views
0

Я пытаюсь настроить некоторые строки подключения в app.config, но постоянно получаю сообщение об ошибке,System.NullReferenceException в библиотеке классов

System.NullReferenceException: Object reference not set to an instance of an object. 

Я посмотрел на многочисленных решениях в Интернете, но ничего напрямую не относится,

  • Я копирую файл app.config в целевой каталог
  • Я ссылочного System.Configuration и я использую ConfigurationManager
  • разметке XML/источник почти дословная копия Microsoft guidelines

Единственное отличие состоит в том, что проект является библиотека классов, которые я выставляя Excel через ExcelDNA.

Есть ли что-то особенное, что мне нужно сделать, чтобы заставить это работать с Excel?

Вот фрагмент из XML,

<configuration> 
    <connectionStrings> 
     <add name="ConnectionCSV" providerName="System.Data.OleDb" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;" /> 
    </connectionStrings> 
</configuration> 

Это исходный код (получили using System.Configuration, наряду с необходимыми ссылками),

string constr = ConfigurationManager.ConnectionStrings["ConnectionCSV"].ConnectionString; 

выше линии бросает ошибку Object reference not set to an instance of an object.

ответ

2

Имя файла конфигурации должно совпадать с именем файла .XLL, созданного ExcelDNA.

например.

MyApp-AddIn.xll ->MyApp-AddIn.xll.config

MyApp-AddIn64.xll ->MyApp-AddIn64.xll.config

+0

Большое спасибо, Caio. В точку! – insomniac

1
  • Библиотеки не имеют собственных app.config файлов, принадлежащих родительскому исполняемому файлу.
  • В Excel.exe нет собственного файла app.config.
  • Строка подключения ConnectionCSV не существует ни в каком конфигурационном файле, если таковой имеется, используется во время выполнения. Вы можете проверить это, проверив сначала ConfigurationManager.ConnectionStrings["ConnectionCSV"] != null и предупредив пользователя, если ключ не существует.

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

Update:

Я просто нашел эту страницу на MSDN, которая описывает точную проблему и объясняет, как вы можете использовать app.config файлов с Управлением надстройки: https://msdn.microsoft.com/en-us/library/16e74h9c.aspx

В частности:

В поле [app.config имя_файла] введите то же имя, что и сборка, а также расширение .config. Например, файл конфигурации для сборки проекта Excel под названием ExcelWorkbook1.dll будет называться ExcelWorkbook1.dll.config.

+0

Спасибо большое, Дай. Это дополнительное разъяснение помогло. Задайте этот вопрос в разделе '_bleeding manifest_'. ;-) – insomniac