Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用app.config中的XML include或config引用包含其他配置文件';设置_C#_.net_Configuration_App Config - Fatal编程技术网

C# 使用app.config中的XML include或config引用包含其他配置文件';设置

C# 使用app.config中的XML include或config引用包含其他配置文件';设置,c#,.net,configuration,app-config,C#,.net,Configuration,App Config,我在我的app.config中有标准日志记录、NHibernate等配置块,我想将它们提取到一个通用XML文件中,可以作为我所有应用程序的app.config文件的参考 这可能吗?是的,您可以使用配置块的configSource属性。所有配置块都具有此属性-尽管没有文档记录 请参见底部的附录B。我还粘贴了以下相关部分: 附录B:包括外部配置文件 尽管在.NET2.0的配置特性中有很多优点,但有一个缺点。当跨多个环境处理单个项目时,管理配置可能成为一场噩梦。在我当前的工作中,管理多个环境中配置文件

我在我的
app.config
中有标准日志记录、NHibernate等配置块,我想将它们提取到一个通用XML文件中,可以作为我所有应用程序的
app.config
文件的参考


这可能吗?

是的,您可以使用配置块的
configSource
属性。所有配置块都具有此属性-尽管没有文档记录

请参见底部的附录B。我还粘贴了以下相关部分:

附录B:包括外部配置文件

尽管在.NET2.0的配置特性中有很多优点,但有一个缺点。当跨多个环境处理单个项目时,管理配置可能成为一场噩梦。在我当前的工作中,管理多个环境中配置文件的多个版本(即开发、测试、暂存和生产)的过程涉及在将更改部署到一个或另一个环境时手动比较
.config
文件,以及手动合并过程。我花了几个月的时间试图找到一个更好的方法,最终找到了一个。请输入一个备受喜爱的“未文档化”功能,或者在本例中,只是文档化程度很差,这是微软非常有名的功能:
configSource
。我只是在使用Reflector(一个很棒的小工具)挖掘.NET2.0配置源代码时才发现这个小宝石

当.NET配置类解析和加载每个配置节时,会为每个配置节分配一个
SectionInformation
对象。
SectionInformation
对象包含有关配置节的元信息,并允许对在子配置文件(ASP.NET)中定义节时如何相互覆盖进行一些管理。现在,我们将忽略SectionInformation提供的大部分内容,保存
ConfigSource
属性。通过向任何
ConfigurationSection
的根元素添加
configSource
属性,您可以指定一个备用的外部源,从中加载配置设置

<!-- SomeProgram.exe.config -->
<configuration>
  <connectionStrings configSource="externalConfig/connectionStrings.config"/>
</configuration>

<!-- externalConfig/connectionStrings.config -->
<connectionStrings>
  <add name="conn" connectionString="blahblah" />
</connectionStrings>

在上面的配置文件中,
部分来自一个名为
externalConfig/connectionStrings.config
的文件。应用程序的所有连接字符串都将从指定文件加载。既然连接字符串是从外部资源加载的,那么在每个环境中相同的相对位置创建一个
connectionStrings.config
文件就相对简单了。因此,
externalConfig/
connectionStrings.config
路径的一部分。这里的美妙之处在于,我们可以为每个环境正确定义一次连接字符串。我们不必担心在配置文件未正确合并或根本未合并的部署过程中意外覆盖这些设置。在将应用程序中的更改部署到生产环境时,这可能是一个巨大的好处,在生产环境中,存在正确的数据库连接字符串至关重要。使用
configSource
属性的缺点是,它需要将所有配置设置放置在外部文件中。没有继承或重写是可能的,这在某些情况下使它无用。与
configSource
属性一起使用的所有外部配置文件也必须位于主
.config
文件的相对子路径中。我相信这是关于在web环境中将文件存储在相对父路径中的安全问题

另外需要注意的是,
部分有一个比使用
configSource
更好的替代方法,称为file。如果在
部分使用file属性而不是configSource,则可以在根
.config
文件和引用的文件中定义设置。根
.config
文件中的设置也可以在引用的文件中被覆盖,只需添加具有相同密钥的内容即可。遗憾的是,file属性仅在
部分可用,并且没有内置到配置框架中。您可以在自己的配置部分中实现类似的属性。这将在高级配置主题的后续部分中讨论,在几个必备部分之后;)


您可以使用configSection属性
-我想您的意思是
configSource
?我刚刚发现,需要注意的是,它必须是物理路径,不能是UNC路径:(