DLL и app.config

Pavluha
Дата: 24.06.2014 10:38:09
Возникла проблема с файлом app.config для dll.
Всегда возвращает старое значение, а не измененное в файле.
Скиньте ссылочку или решение.


Почитал в интете, что для длл не так все просто.
ValGer
Дата: 24.06.2014 11:48:41
Pavluha
Возникла проблема с файлом app.config для dll.
Всегда возвращает старое значение, а не измененное в файле.
Скиньте ссылочку или решение.


Почитал в интете, что для длл не так все просто.


Что возвращает-то? И где вы прочитали в инете?
Может быть нужно пользоваться свойствами проекта, в котором создаётся DLL (Resource , Settings)?
Pavluha
Дата: 24.06.2014 13:39:28
ValGer,

Именно так и делаю. Всегда возвращает дефолтное значение, как не менял его в файле app.config.
Сон Веры Павловны
Дата: 24.06.2014 13:42:02
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 не поддерживает ни абсолютных, ни относительных путей.
Pavluha
Дата: 24.06.2014 13:47:17
Сон Веры Павловны,

Спасибо! Про это и читал. Сделал пока через ini-файл. Файл настроек должен быть рядом с длл. А вызывающее приложение вообще находится в другой папке.