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

Какое использование имеет файл по умолчанию (сборка).dll.config для .NET-Assemblies?

У меня есть вопрос относительно AppSettings в С#. Сначала я опишу свою ситуацию.

Мое решение состоит из исполняемой программы program.exe и assembly.dll.

Программа ссылается на сборку и работает с ней. В сборке-проекте установлены параметры приложения, настроенные с помощью диспетчера параметров проекта Visual Studio. Теперь, когда я компилирую свое решение в моей папке assembly\bin\release, есть файл assembly.dll.config, который содержит настройки, которые я установил ранее.

Теперь я не понимаю: в моем программном проекте, где я ссылаюсь на assembly.dll, я проверил CopyLocal=True, но в моей папке program\bin\release есть только assembly.dll, но не сборка. dll.config, но STILL assembly.dll знает настройки, которые я установил в настройках приложения сборки и проекта.

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

Я предполагаю, что параметры скомпилированы в сборку в compiletime (конечно), но тогда нет смысла, что в моей сборке \bin\release папке фактически есть файл assembly.dll.config.

Я попытался скопировать этот файл в мою папку program\bin\release, где assembly.dll скопирован на операцию сборки, но assembly.dll просто игнорирует, есть ли файл assembly.dll.config, присутствующий в той же папке. Он всегда использует настройки из compiletime. Я просто не понимаю использование файла assembly.dll.config. Почему он создается, когда он никогда не влияет на поведение assembly.dll´s?

4b9b3361

Ответ 1

Значения по умолчанию встроены в DLL файл. Вы, конечно, можете изменить эти настройки, но вы делаете это в config.exe вместо этого, обратившись к настройкам сборки с помощью раздела в configSeconds/sectionGroup. Настройки сборки можно затем изменить в настройках приложения, создав блок XML с тем же именем, что и раздел.

Тег раздела в группе разделов можно просто скопировать из файла app.config вашего проекта сборки. Таким образом, токен, имя и т.д. Будут правильными. То же самое касается части applicationSettings. Просто скопируйте его из app.config в проекте сборки и в файл app.config проекта program.exe.

example program.exe.config:

<configuration>
  <configSections>
    ... references to all dll settings ...
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="MyAssemblyNamespace.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  ... more config stuff...
  <applicationSettings>
    ... override your dll settings ...
    <MyAssemblyNamespace.Properties.Settings>
       <setting name="MaxUserNameLength" serializeAs="String">
          <value>100</value>
       </setting>
    </MyAssemblyNamespace.Properties.Settings>
  </applicationSettings>

Ответ 2

Для сборки можно использовать любой конфигурационный файл, который ему нравится, используя метод OpenExeConfiguration. Этот способ может получить доступ к их собственной конфигурации, а не к той, которая неявно доступна из исполняющей сборки. Это обычно не делается, но вам нечего делать.

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