【问题标题】:Understanding ASP.NET Web.config transformations - Web.Debug.config了解 ASP.NET Web.config 转换 - Web.Debug.config
【发布时间】:2019-03-21 23:30:00
【问题描述】:

我已经为此苦苦挣扎了一个小时,但找不到简单的解释或至少一些说明这一点的 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"];

我了解到,如果我在 Visual Studio 中运行 Debug -> Start Debugging,将从 Web.Debug.config 中读取 DevDisplayPanel 设置。我找不到说明这一点的 Microsoft 文档。

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

Web.Debug|Release|MyConfiguraton.config 文件在哪里发挥作用。我错过了什么,最重要的是,这种行为应该在文档的某处用粗体标出!!

【问题讨论】:

  • 我过去调试不同配置所做的是通过放置“__ somevalue __”而不是实际值来“标记”各种配置文件。然后为每个带有真实值的构建配置创建一个 xml 文件(或您的偏好)。替换令牌的简单 .exe 设置为在构建后步骤中运行,并替换 bin 文件夹中的配置文件。它并不像听起来那么糟糕。

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


【解决方案1】:

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

当你在 Visual Studio 中调试时,它总是使用普通的 web.config 文件,不管配置是什么。

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

【讨论】:

  • 你是对的,谢谢。但是这个功能并不是那么容易使用。我只是让更多的混乱而不是 Visual Studio 的简单用法。我还没有找到文档,它指出 Visual Studio 中的 Debug 会忽略 Web.xxx.config 文件。
  • 更多的是 ms 构建过程不同并且不针对 pubxml 文件。我同意这不直观
【解决方案2】:

感谢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 Studio 2019。

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

使用此 sn-p 具有额外的好处,即在部署之前在构建服务器上工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2016-08-19
    • 2018-01-11
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多