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

时间:2011-11-10 12:02:08

标签: asp.net web-config transformation

我无法在网上找到我的问题的例子,并且想知道是否有人知道解决方案。基本上,如果在我们的web.config上,我们指向另一个文件,如:

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

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

基本上,我想创建一个AppSettings.config,AppSettings.Debug.config,AppSettings.Release.config并对其进行转换...这甚至可能吗?

提前致谢,

塞尔吉奥

3 个答案:

答案 0 :(得分:30)

解决方法很少:

  

解决方法1

  • 使用完整值(不包含转换属性)编写AppSettings.Debug.configAppSettings.Release.config
  • web.config中,使用转换,替换为相应的文件:

<强> web.debug.config

<appSettings file="AppSettings.debug.config" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(file)"/>

<强> web.release.config

<appSettings file="AppSettings.release.config" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(file)"/>

它不太理想,有点挫败了变换的目的,但可能基于一个人的情况而不是使用像SlowCheetah这样的东西。

  

解决方法2

使用TransformXml构建任务在构建过程中按指示herehere

转换文件

答案 1 :(得分:8)

有一个名为Slow Cheetah的Visual Studio插件项目,它采用了转换的概念,并允许您将其应用于web.config以外的文件,我还没有使用它,但我认为它会做你做的事情想做。斯科特汉塞尔曼做了一个blog

答案 2 :(得分:0)

已接受的答案中的解决方法1使我走上了正确的轨道,但由于转换不太正确,因此无法正常工作。正确的转换就是

<appSettings file="AppSettings.debug.config" 
         xdt:Transform="SetAttributes"/>

我必须删除xdt:Locator =“ Match(file)”,以便更改文件属性本身。 Web Config Transformations解释说Match(key)将找到要更改的元素,但只会更改节点的其他元素,而不是定位器/匹配键本身。每个配置文件只有一个appSetting,因此我们无需查找特定实例。

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