ASP.Net Web.Config转换命名问题

时间:2015-07-06 17:18:29

标签: c# asp.net web-config web-config-transform

我有一个利用web.config转换的ASP.Net项目。为了促进这一点,我建立了一个类似的结构:

web.base.config
    web.debug.config
    web.QA.config
    web.release.config
    web.config

web.base.config包含web.config数据的未转换基础,而web.[ENVIRONMENT].config包含基于当前构建配置的转换数据。 web.config包含在运行时加载的转换结果。

这对我们来说非常有效,并且非常适合进行更改。

然而,到目前为止我手动解决了一个小问题:当我更新我的NuGet依赖关系时,他们将他们的转换应用到web.config文件,然后在构建时被吹走与我的其他配置的转换。

我已经研究了几种不同的方法来解决这个问题,我没有运气......有什么想法吗?

为了记录,这是我实现上述web.config架构(在项目文件中)的方式:

  <ItemGroup>
    <None Include="Web.base.config">
    </None>
    <None Include="Web.base.Local.config">
      <DependentUpon>Web.base.config</DependentUpon>
    </None>
    <None Include="Web.base.Debug.config">
      <DependentUpon>Web.base.config</DependentUpon>
    </None>
    <None Include="Web.base.Release.config">
      <DependentUpon>Web.base.config</DependentUpon>
    </None>
    <None Include="Web.base.QA.config">
      <DependentUpon>Web.base.config</DependentUpon>
    </None>
    <Content Include="Web.config">
      <DependentUpon>Web.base.config</DependentUpon>
    </Content>
  </ItemGroup>
  <Target Name="BeforeBuild">
    <Exec Command="attrib -r Web.config" />
    <TransformXml Source="web.base.config" Transform="web.base.$(Configuration).config" Destination="web.config" StackTrace="true" />
  </Target>

1 个答案:

答案 0 :(得分:2)

按照设计,web.config应包含所有基本/默认/调试值。然后你&#34;覆盖&#34;具有变换的那些(基于环境,配置或您选择的任何标准)。我不认为有任何设置允许您说使用web.base.config代替web.config。你最好的选择是遵循惯例。

E.g。 的的web.config

<add key="IsDebug" value="true" /> 

<强> web.release.config

<add key="IsDebug" value="false"  xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />