ASP.NetWeb.Config转换命名问题

ASP.Net Web.Config transform naming issues

我有一个使用 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>

根据设计,web.config 应包含所有 base/default/debug 值。然后,您 "overrride" 进行转换(基于环境、配置或您选择的任何标准)。我认为没有任何设置可以让您说使用 web.base.config 而不是 web.config。最好的办法是遵循惯例。

例如 web.config

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

web.release.config

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