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

bas*_*gio 30 asp.net web-config transformation

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

<configuration>
  <configSections />
  <appSettings file="AppSettings.config">
</configuration>
Run Code Online (Sandbox Code Playgroud)

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

基本上,我想创建一个AppSettings.config,AppSettings.Debug.config,AppSettings.Release.config并有一个转变从上面压过......这甚至可能吗?

提前致谢,

塞尔吉奥

Mrc*_*ief 32

解决方法很少:

解决方法1

  • AppSettings.Debug.config,AppSettings.Release.config满值(不与变换属性)
  • 在您的web.config使用转换中,使用适当的文件替换:

web.debug.config

<appSettings file="AppSettings.debug.config" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(file)"/>
Run Code Online (Sandbox Code Playgroud)

web.release.config

<appSettings file="AppSettings.release.config" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(file)"/>
Run Code Online (Sandbox Code Playgroud)

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

解决方法2

使用TransformXml构建任务在构建过程中转换文件,如此此处所指出的那样


Phi*_*ove 8

有一个名为Slow Cheetah的Visual Studio插件项目,它采用了转换的想法,允许你将它应用到web.config之外的文件,我还没有使用它,但我认为它会做你想做的事情.Scott Hanselman做了一个关于它的博客.


kva*_*kel 5

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

<appSettings file="AppSettings.debug.config" 
         xdt:Transform="SetAttributes"/>
Run Code Online (Sandbox Code Playgroud)

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

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