Я создаю службу Windows в .Net 4.0 и тестирую некоторые функции этой службы с помощью клиента форм Windows, ссылаясь на проект службы.
Проект службы имеет файл App.config, и этот файл выглядит следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<clear />
<add name="myLocalMySQLDBUsername" connectionString="username"/>
</connectionStrings>
</configuration>
Когда функция, принадлежащая службе, вызывает:
выдается ошибка нулевой ссылки, потому что моя строка подключения не загружена. Загружаются только строки подключения из файла machine.config, расположенного в c: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config
Если я создаю параметр области приложения для службы, я можно получить эту настройку с помощью My.Settings.setting ->, поэтому это не похоже на то, что файл App.config не читается.
Мой вопрос: почему мои строки подключения не загружаются из файла App.config?
Спасибо за вашу помощь.
ОБНОВЛЕНИЕ:
Кроме того, на данный момент, даже работа вокруг будет оценена; единственная причина для использования приложения. config должен иметь возможность зашифровать содержимое с помощью DpapiProtectedConfigurationProvider (содержимое будет иметь некоторые значения имени пользователя и пароля для соединений службы и базы данных).
Я попытался создать раздел AppSettings вручную в app.config, но эти настройки также не были прочитано диспетчером конфигурации (count = 0).
ОБНОВЛЕНИЕ 2:
Согласно предложению, я попытался вручную открыть файл app.config следующим образом:
Dim exePath As String = System.IO.Path.Combine(Environment.CurrentDirectory, "ServiceName.exe")
Dim myConfig As Configuration = ConfigurationManager.OpenExeConfiguration(exePath)
Итак, вот странная часть, когда я смотрю внутрь , путь правильный (указывает на мой app.config), но строки подключения все еще загружаются из файла machine.config (мои строки подключения не загружаются) !! ARGH
ОБНОВЛЕНИЕ 3:
Хорошо, итак, я разобрался. При ссылке на проект (родительский) из другого проекта (дочернего) дочерний app.config используется, даже если используются родительские классы. Таким образом, Я могу отобразить строки подключения, если скопирую их в файл app.config ребенка. При попытке открыть его вручную мой currentDirectory был дочерним, а не родительским (странно, как он не генерировал исключение - он не смог бы найти файл конфигурации ... он просто молча использовал machine.config ... Ну что ж).
Спасибо всем за помощь!