了解ASP.NET Web.config转换-Web.Debug.config

时间:2018-10-17 10:06:37

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

我已经苦苦挣扎了一个小时,找不到简单的解释,也找不到至少一些说明此问题的Microsoft文档。

我想了解下一个文件的行为:

  • Web.config
  • Web.Debug.config
  • Web.Release.config
  • Web.Staging.config(我是通过右键单击Web.config->“添加配置转换”创建的)

我在 Web.config 文件中添加了下一个appSetting:

<configuration>
  ..
  <appSettings>
    <add key="DevDisplayPanel" value="default value" />
  </appSettings>
  ..
</configuration>

在我的 Web.Debug.config 中,将 DevDisplayPanel 更改为此:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="DevDisplayPanel" 
         xdt:Transform="Replace" 
         xdt:Locator="Match(key)" 
         value="Debug mode" />
  </appSettings>
</configuration>

我这样显示了appSettings项:

ViewBag.Test = System.Configuration.ConfigurationManager.AppSettings["DevDisplayPanel"];

我了解,如果我运行Debug->在Visual Studio中开始调试,则将从 Web.Debug.config 中读取DevDisplayPanel设置。我找不到说明此问题的Microsoft文档。

我尝试使用Debug,Release和Staging解决方案配置运行Web应用程序,但是它们都显示文件 Web.config 中的DevDisplayPanel值。

文件Web.Debug | Release | MyConfiguraton.config在哪里起作用。我错过了什么,最重要的是,再次在文档中的某个地方以粗体显示了此行为!

2 个答案:

答案 0 :(得分:1)

Web.config转换与发布以给定配置的项目相关联。

在Visual Studio中调试时,无论使用什么配置,它始终使用纯web.config文件。

您需要从菜单选项中选择Build => Publish,然后运行已发布的应用程序。

答案 1 :(得分:1)

贷记https://gist.github.com/EdCharbeneau/9135216

您可以在.csproj的底部添加类似的内容

 <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" />
  <Target Name="BeforeBuild">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
  </Target>

v16是Visual Studio2019。

请注意,这将用转换中的所有更改覆盖原始的web.config。我实际上是在与我的团队讨论如何最好地在我们的项目中做到这一点,一种解决方案是将调试项目时使用的所有“标准”设置都放在web.debug.config中。并将其视为您的“基础” web.config。

使用此代码段具有在部署之前在构建服务器上工作的额外好处。