Почему мое приложение не читает файл MyApplication.dll.config? - PullRequest
2 голосов
/ 01 октября 2010

Я пытаюсь использовать настройки приложения в проекте C # .NET, над которым я работаю.Но я не могу заставить его возвращать что-либо кроме значений по умолчанию.Через свойства проекта я добавил единственный параметр DBConnectionString и установил его значение в строку подключения, которую я хочу использовать.Его область действия установлена ​​в «application».

При этом был создан ряд файлов, включая Settings.settings, Settings.Designer.CS и app.conifg.Из того, что я понимаю, два файла настроек. * Определяют пользовательский класс Settings, производный от ApplicationSettingsBase.Класс Settings имеет настраиваемые свойства типа safe, которые можно использовать для установки и извлечения каждого параметра.Файл app.config представляет собой XML-файл, в котором хранятся фактические значения параметров.

Когда я создаю свой проект, создается впечатление, что файл app.config копируется в целевой каталог как MyApplication.dll.config.Моя программа работает нормально и может использовать строку подключения по умолчанию.

Далее я попытался отредактировать файл MyApplicaiton.dll.config, чтобы изменить строку подключения.Я снова запустил свою программу, но она продолжала использовать значение по умолчанию.Я заметил, что в моем файле Settings.Designer есть DefaultSettingValueAttribute с исходной строкой по умолчанию.Я попытался удалить этот атрибут, но затем, когда я попытался получить настройку строки подключения, он просто возвратил ноль.

Это код, который я использую для чтения строки подключения.

string conn = Properties.Settings.Default.DbConnectionString

Что я делаю неправильно?Как заставить его вернуть значение в файле настроек, а не значение по умолчанию?


Обновление:

Извините, я должен был упомянуть об этом.Я на самом деле пишу плагин для другого приложения через публичный API.Так что мой проект - это DLL, а не EXE.

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

Вы не можете прочитать настройки из *.dll.config файлов.Если вашей библиотеке требуются какие-либо специальные настройки, вам нужно поместить их в файлы app.config или web.config.

РЕДАКТИРОВАТЬ: вы можете включить внешние файлы конфигурации в основное приложение или файл веб-конфигурации.Подробнее смотрите здесь .

В этом вопросе обсуждается, как управлять файлами конфигурации для больших проектов.

0 голосов
/ 01 октября 2010

Файлы настроек и файлы .config - это разные вещи (я не знаю, почему VS автоматически добавил .config при создании файла настроек). Но файл настроек скомпилирован в класс и на него ссылаются, как вы сказали. Если вы декомпилируете dll с помощью .NET рефлектора, там будет класс настроек. Он используется для хранения постоянных значений или внешних ресурсов. Например: строки сообщений об ошибках, значки или изображения.

Файл конфигурации предназначен для настроек, которые могут часто меняться или в зависимости от среды (dev, test, prod). Для строки подключения вы должны использовать раздел файла конфигурации. На это свойство можно ссылаться с помощью System.Configuration.ConfigurationManager ["connectionStringName"].

Однако из вашего исходного поста похоже, что ваш .dll будет использоваться в более крупном проекте (или .exe веб-проекта). Следует отметить, что все проекты используют только один файл .config. И это файл конфигурации для основного проекта. Веб-сайты файл web.config и exe использует XXX.XXX.XXX.exe.config (как вы видели, * .exe.config файлы являются переименованными копиями файлов app.config). У DLL нет доступных для использования конфигурационных файлов. Все DLL будут смотреть на файл .config основного проекта для получения информации.

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

...