App.config для DLL - PullRequest
       36

App.config для DLL

11 голосов
/ 01 октября 2008

У нас есть «движок», который динамически загружает dll (все, что находится в определенном каталоге) и вызывает классы Workflow из них путем отражения.

Теперь у нас есть несколько новых рабочих процессов, которым требуется доступ к базе данных, поэтому я решил поместить файл конфигурации в каталог dll.

Но по каким-то причинам мои рабочие процессы просто не видят файл конфигурации.

<configuration>
  <appSettings>
      <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" />
  </appSettings>
</configuration>

Учитывая указанный выше файл конфигурации, следующий код печатает пустую строку:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]);

Я думаю, что мне нужно просто указать имя файла конфигурации, но у меня здесь проблемы. Я просто не получаю результаты. У кого-нибудь есть указатели?

Ответы [ 6 ]

7 голосов
/ 01 октября 2008

Если пример кода для чтения AppSettings находится в вашей DLL, он попытается прочитать файл конфигурации для приложения, а не файл конфигурации для DLL. Это потому, что вы используете Reflection для выполнения кода.

4 голосов
/ 01 октября 2008

Забавно, где я нахожусь, мы делаем нечто очень похожее, и файл конфигурации загружается просто отлично. В нашем случае я думаю, что имя каждого нового файла конфигурации совпадает с именем соответствующей сборки. Таким образом, MyLibrary.dll будет иметь файл с именем MyLibrary.dll.config с информацией для этого файла сборки. Кроме того, пример, который мне удобен, - это использование VB.Net, а не C # (у нас есть некоторые из них), и все настройки там для специфического для VB пространства имен My.Settings, поэтому мы не используем класс ConfigurationManager напрямую читать их.

Сами настройки выглядят так:

<applicationSettings>
    <MyLibrary.My.MySettings>
        <setting name="SomeSetting" serializeAs="String">
            <value>12345</value>
        </setting>
    </MyLibrary.My.MySettings>
</applicationSettings>
1 голос
/ 02 июня 2011

Вот один из способов - AppDomain.CurrentDomain.SetData («APP_CONFIG_FILE», «путь к файлу конфигурации»);

Позвонить в конструктор.

1 голос
/ 01 октября 2008

Я написал это для аналогичной системы. Насколько я помню, я использовал Assembly.GetExecutingAssembly, чтобы получить путь к файлу к DLL, добавил .config к этому имени, загрузил его как XmlDocument, перешел на узел <appSettings> и передал его NameValueSectionHandler ' с Create метод.

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

Я не совсем уверен, но я думаю, что класс по умолчанию работает только с путем метода входа в AppDomain (путь exe большую часть времени). Сначала необходимо вызвать OpenExeConfiguration (строка exePath) (Framework 2.0 и более поздние версии), чтобы указать другой файл конфигурации.

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

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

...