Какое использование имеет файл по умолчанию (сборка).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
?
Ответы
Ответ 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. Этот способ может получить доступ к их собственной конфигурации, а не к той, которая неявно доступна из исполняющей сборки. Это обычно не делается, но вам нечего делать.
Если ваша сборка работает правильно без файла конфигурации, это звучит так, будто у нее есть разумный набор значений по умолчанию, которые он использует, когда он не может найти нужную конфигурацию.