发布webapp时web.config的奇怪转换行为

时间:2015-12-17 16:09:37

标签: c# asp.net-mvc msbuild

我已经为web.config创建了一个新的mvc webapp,其中包含以下转换:

Web.Debug.config

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="Debug" value="true" xdt:Transform="Insert"/>
  </appSettings>
</configuration>

Web.Release.config

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="Release" value="true" xdt:Transform="Insert"/>
  </appSettings>  
</configuration>

然后我创建了一个发布配置文件并将其命名为Release,但我选择了Debug(OBS!important)构建配置。

(我知道。愚蠢的例子。在我的真实项目中,他们被称为Test and Test2。)

当我运行发布操作时,我在转换后的Web.config中获得以下内容:

  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="Debug" value="true"/>
    <add key="Release" value="true"/>
  </appSettings>

两次转换均已完成!奇怪!如果我将发布配置文件的名称更改为Release2,我会得到正确的结果:

  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="Debug" value="true"/>
  </appSettings> 
你怎么看?错误?

1 个答案:

答案 0 :(得分:1)

遇到同样的问题,最后能够确定原因并解决它。

发生此问题是因为发布配置文件配置设置混乱。使用配置管理器设置配置文件时,应确保当前解决方案配置与将要使用的配置相匹配:Easiest way for configuration to track config Transformations

否则,请记住,在选择配置文件配置之前,将应用选定的配置转换。

因此,请确保没有为不同的配置文件分配两次配置。如果是这样,只需为“失败”配置文件添加一个配置即可解决此问题,并获得您在应用转换时的预期。