Подтвердить что ты не робот

App.config для dll

У нас есть "движок", который динамически загружает dlls (все, что находится в определенном каталоге), и вызывает из них классы 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"]);

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

4b9b3361

Ответ 1

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

Ответ 2

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

Настройки сами выглядят следующим образом:

<applicationSettings>
    <MyLibrary.My.MySettings>
        <setting name="SomeSetting" serializeAs="String">
            <value>12345</value>
        </setting>
    </MyLibrary.My.MySettings>
</applicationSettings>

Ответ 3

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

Ответ 4

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

Вызов конструктора.

Ответ 5

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

Ответ 6

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