Asp.net 如何将配置转换应用于外部配置文件

Asp.net 如何将配置转换应用于外部配置文件,asp.net,web-config,transformation,Asp.net,Web Config,Transformation,我在网上找不到我的问题的例子,我想知道是否有人知道解决办法。基本上,如果在web.config上指向另一个文件,如下所示: <configuration> <configSections /> <appSettings file="AppSettings.config"> </configuration> 那么,我们如何将转换应用于该外部文件 基本上,我想创建一个AppSettings.config、AppSettings.Debug

我在网上找不到我的问题的例子,我想知道是否有人知道解决办法。基本上,如果在web.config上指向另一个文件,如下所示:

<configuration>
  <configSections />
  <appSettings file="AppSettings.config">
</configuration>

那么,我们如何将转换应用于该外部文件

基本上,我想创建一个AppSettings.config、AppSettings.Debug.config、AppSettings.Release.config,并在上面运行一个转换。。。这可能吗

提前感谢,


Sergio

有一个名为Visual Studio插件的项目,它采用了转换的思想,允许您将其应用于web.config以外的文件,我没有使用过它,但我认为它可以做您想做的事情。Scott Hanselman对此做了一个分析。

几乎没有解决办法:

解决方案1

  • 使用完整值(不使用转换属性)写入
    AppSettings.Debug.config
    AppSettings.Release.config
  • web.config
    中,使用转换,替换为适当的文件:
web.debug.config

<appSettings file="AppSettings.debug.config" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(file)"/>
<appSettings file="AppSettings.release.config" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(file)"/>
它不太理想,有点违背了转换的目的,但是根据一个人的情况可能比使用像SlowCheetah这样的东西更合适

解决方案2


使用
TransformXml
build task在生成过程中按指定方式转换文件,并且接受答案中的解决方法1使我走上了正确的轨道,但没有按原样工作,因为转换不太正确。正确的转换是正确的

<appSettings file="AppSettings.debug.config" 
         xdt:Transform="SetAttributes"/>
说明Match(key)将定位要更改的元素,但只更改节点的其他元素,而不更改定位器/匹配键本身。每个配置文件只有一个appSetting,所以我们不需要定位特定的实例


(我没有足够的声誉对接受的答案发表评论,所以我将此作为另一个答案发布。)

对于解决方案1,我不会在部署的版本上有单独的AppSettings.config,对吗?“预设”AppSettings.Release.config将合并到主web.config中。您仍然需要部署
AppSettings.Release.config
。这些设置不是从
web.config
中提取的,而是从您指向的文件中加载的。