Повторение конфигурации между ссылочными сборками - PullRequest
7 голосов
/ 25 июня 2011

Допустим, у нас есть Assembly1 и Assembly2.

Assembly2 - это библиотека классов C #, используемая Assembly1.

Веб-ссылки и ссылки на службы настраиваются и хранятся в Asembly2 / app.Config.

Кроме того, строка (и) соединения EF находятся в Assembly2 / app.Config.

Когда я использую Assembly2 в Assembly1, файл конфигурации Assembly2 не используется. Фактически, в этом сценарии только конфигурация Assembly1 представляется доступной с помощью средств по умолчанию.

В результате я должен скопировать содержимое конфигурации Assembly2 в конфигурацию Assembly1.

Это сработало для меня во многих проектах.

Есть ли другой способ? Лучший способ?

Кажется неправильным иметь повторяющиеся данные конфигурации.

У вас есть рекомендации или техника, которая работает?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 25 июня 2011

Необходимо применить изменения к файлу конфигурации exe сборки точки входа.Конфигурационные файлы библиотеки классов (dll) никогда не используются.Они сделаны Visual Studio, так что вы можете легко скопировать настройки в файлы конфигурации exe, если это необходимо.

Ниже приведен пример файла конфигурации для сборки exe, в котором есть как настройки из библиотеки классов ClassLibrary1, так и настройки изсборка exe MainAssembly.Вы можете видеть, что обе строки подключения находятся в одной connectionStrings настройках.Однако, если вам нужно установить другие параметры, кроме строки подключения, вам нужно добавить дополнительный раздел.

Если вы уже используете эту технику, это правильный путь.Этот метод является гибким.Например, если у вас есть несколько проектов, имеющих одинаковые строки подключения в одном блоке, вы можете указать строки подключения в файле machine.config.При необходимости вы также можете переопределить настройки в некоторых проектах.

<?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings"
                  type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >

      <!--This section declaratrion pasted here from dll conifg file -->
      <section name="ClassLibrary1.Properties.Settings"
               type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
               requirePermission="false" />

      <!--This section declaratrion was here in the first place -->
      <section name="MainAssembly.Properties.Settings"
               type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
               requirePermission="false" />
    </sectionGroup>
  </configSections>
  <connectionStrings>

    <!--This connection string was here in the first place -->
    <add name="MainAssembly.Properties.Settings.MainAssemblyConnectionString"
         connectionString="MainConnectionStringValue" />

    <!--This connection string pasted here from dll config file -->
    <add name="ClassLibrary1.Properties.Settings.LibraryConnectionString"
         connectionString="LibraryConnectionStringValue"
         providerName="" />
  </connectionStrings>
  <applicationSettings>

    <!--This settings section pasted here from dll config file -->
    <ClassLibrary1.Properties.Settings>
      <setting name="LibrarySetting"
               serializeAs="String">
        <value>LibrarySettingValue</value>
      </setting>
    </ClassLibrary1.Properties.Settings>

    <!--This strings section was here in the first place -->
    <MainAssembly.Properties.Settings>
      <setting name="MainAssemblySetting"
               serializeAs="String">
        <value>MainSettingValue</value>
      </setting>
    </MainAssembly.Properties.Settings>
  </applicationSettings>
</configuration>
2 голосов
/ 25 июня 2011

DLL (или другая ссылочная сборка) не предназначена для переноса собственного app.config, а скорее для того, чтобы все настраивалось вызывающей стороной. Так что все должно идти в app.config exe.

Рассмотрим, например, разделяемую библиотеку доступа к данным, которой требуются строки подключения к базе данных. Библиотеку следует использовать из множества приложений с разными требованиями к соединению. Строка подключения, привязанная строго к разделяемой библиотеке, не будет работать, это должно быть сделано на клиенте с использованием библиотеки.

Можно поместить общесистемные настройки, которые влияют на все приложения, работающие на машине, в файл machine.config, но используйте этот подход с осторожностью, поскольку это повлияет на все приложения на машине.

...