C# 跨引用的程序集重复配置

C# 跨引用的程序集重复配置,c#,configuration-files,C#,Configuration Files,假设我们有Assembly1和Assembly2 Assembly2是Assembly1使用的C#类库 Web和服务引用已配置并存储在Asembly2/app.Config中 此外,EF连接字符串位于Assembly2/app.Config中 在Assembly1中使用Assembly2时,不使用Assembly2配置文件。事实上,在该场景中,只有Assembly1配置可以通过默认方式访问 因此,我必须将Assembly2配置内容复制到Assembly1配置中 这对我很多项目都很有效 还有别的办

假设我们有Assembly1和Assembly2

Assembly2是Assembly1使用的C#类库

Web和服务引用已配置并存储在Asembly2/app.Config中

此外,EF连接字符串位于Assembly2/app.Config中

在Assembly1中使用Assembly2时,不使用Assembly2配置文件。事实上,在该场景中,只有Assembly1配置可以通过默认方式访问

因此,我必须将Assembly2配置内容复制到Assembly1配置中

这对我很多项目都很有效

还有别的办法吗?更好的方法?

重复配置数据似乎是错误的

你有一个有效的建议或技巧吗

谢谢。

一个DLL(或另一个引用的程序集)并不意味着携带它自己的app.config,而是由调用方配置所有内容。因此,所有内容都应该进入exe的app.config

例如,考虑一个需要数据库连接字符串的共享数据访问库。该库应该可以从具有不同连接要求的各种应用程序中使用。将连接字符串严格绑定到共享库是不可行的,必须在使用库的客户机上完成


可以将影响计算机上运行的所有应用程序的系统范围设置放在machine.config文件中,但请谨慎使用该方法,因为它会影响计算机上的所有应用程序。

您需要对入口点exe程序集的配置文件进行更改。从不使用类库程序集(dll)配置文件。它们由Visual Studio制作,因此,如果需要,您可以轻松地将设置复制到exe配置文件

<?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>
下面是exe程序集的配置文件示例,它同时具有来自类库
ClassLibrary1
的设置和来自exe程序集
main程序集的设置。您可以看到两个连接字符串都在一个
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>

库设置值
维护设置值