Как обновить настройки приложения в dll - PullRequest
3 голосов
/ 20 января 2010

Могу ли я заставить DLL перезагрузить свою конфигурацию?

В моей библиотеке VB я использую эту конфигурацию:

<applicationSettings>
    <ComWrapper.My.MySettings>
        <setting name="MySetting" serializeAs="String">
            <value>This is an entry</value>
        </setting>
</applicationSettings>

Нет проблем получить доступ к значению «MySetting» из кода:

Public Function GetSetting() As String
    Return ComWrapper.My.MySettings.Default.MySetting
End Function

но похоже, что значение "Это запись" встроено в код DLL. Если я изменю его в app.config или в файле ComWrapper.dll.config, это не повлияет на возвращаемое значение.

Ответы [ 3 ]

2 голосов
/ 20 января 2010

Значения конфигурации берутся из конфигурации выполняющегося процесса. Значит, если у вас есть ComWrapper.dll и его конфигурационный файл, работающий в контексте YourProcess.exe, параметры конфигурации будут взяты из YourProcess.exe.config.

Итак, вам нужно вставить настройки ComWrapper в файл YourProcess.exe.config, в противном случае это сгенерированное по умолчанию значение (вы можете найти его в файле Settings.Designer).

0 голосов
/ 15 сентября 2010

Я решил свою проблему следующим образом:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + ".config";

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

string value = config.AppSettings.Settings["X"].Value
0 голосов
/ 20 января 2010

Я сам нашел решение

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", filename)

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

...