Pavluha |
---|
Возникла проблема с файлом app.config для dll. Всегда возвращает старое значение, а не измененное в файле. Скиньте ссылочку или решение.
Почитал в интете, что для длл не так все просто. |
Значения извлекаются из самой dll, т.к. для настроек по умолчанию стоит опция GenerateDefaultValueInCode = True, и значение настройки в сериализованном виде прописывается в атрибут DefaultSettingValueAttribute. Поскольку в app.config основного приложения не прописываются секции из dll проекта, то и извлекаются значения по умолчанию, сохраненные в коде. Это всё касается только настроек с application scope, настройки dll с user scope нормально подхватывают измененные значения. Поэтому, если нужно, чтобы нормально возвращались измененные значения настроек из dll, их нужно либо переместить в user scope, либо вручную править app.config. Вариантов здесь 2: поместить настройки dll в сам app.config основного приложения, либо оставить их в отдельном файле. В любом случае в секцию sectionGroup name="applicationSettings" нужно будет добавить узел настроек dll:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MyApplication.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- DLL settings-->
<section name="mydll.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
.....
и далее в узел <applicationSettings> добавить:
1) для просто внедренных в app.config настроек - сами настройки а-ля
<applicationSettings>
<MyApplication.Properties.Settings>
<setting name="Foo" serializeAs="String">
<value>foo</value>
</setting>
......
</MyApplication.Properties.Settings>
<!-- DLL settings-->
<mydll.Properties.Settings>
<setting name="Bar" serializeAs="String">
<value>bar</value>
</setting>
....
<mydll.Properties.Settings>
</applicationSettings>
2) для настроек в отдельном файле:
<applicationSettings>
<MyApplication.Properties.Settings>
<setting name="Foo" serializeAs="String">
<value>foo</value>
</setting>
......
</MyApplication.Properties.Settings>
<!-- DLL settings-->
<mydll.Properties.Settings configSource="mydll.dll.config" />
</applicationSettings>
а сам файл настроек mydll.dll.config должен выглядеть примерно так:
<?xml version="1.0" encoding="utf-8"?>
<mydll.Properties.Settings>
<setting name="Bar" serializeAs="String">
<value>bar</value>
</setting>
....
</mydll.Properties.Settings>
и находиться в той же папке, что и конфиг основного приложения - атрибут configSource не поддерживает ни абсолютных, ни относительных путей.