调试代码时不转换 Web.config
Posted
技术标签:
【中文标题】调试代码时不转换 Web.config【英文标题】:Web.config is not transformed when debugging code 【发布时间】:2016-06-04 05:06:22 【问题描述】:我有一个主要的Web.config
文件,在它下面有一个Web.Test.config
、Web.Development.Config
等。
当我在测试配置中通过 SlowCheetah 预览转换时,它似乎正确地转换了值。
当我将构建环境从开发切换到测试并尝试调试应用程序时,应用程序会在主 Web.config
文件中的任何值下运行(即它不会转换任何东西)。
如何让构建环境在调试时选择正确的配置,而不是总是使用基本的Web.config
文件?这可能吗?
【问题讨论】:
【参考方案1】:您可以在构建时转换Web.config
。将此目标添加到*.csproj
文件中:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
<TransformXml
Source="Web.Base.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
将源配置保留在Web.Base.config
中。启用转换就足够了,它适用于任何 XML 配置文件。不再需要 SlowCheetah。
http://sebnilsson.com/a5410281/asp-net-transform-web-config-with-debug-release-on-build/
【讨论】:
这是最简单的解决方案,我做到了,效果很好。但是......总是有一个但是......当它在Web.Base.config上启用时我总是得到“调试未启用”错误,但我的Web.config第一次是空的。通过选择“修改 Web.config 文件以启用调试”并单击“确定”,它继续正常工作。如果 Web.config 具有启用调试的最后运行版本,则它可以正常工作。似乎在转换之前检查了调试启用。 此解决方案运行良好。但另一个缺点是,Visual Studio/NuGet/等的任何东西。web.config
文件中的更改,需要手动移植到 Web.Base.config
文件中。
对于其他使用多个 VS 版本的人来说,用 $(VisualStudioVersion) 替换我的硬编码值对我有用
如果您不想使用 base,则不必使用 XML 转换只会在您发布 Web 应用程序时应用,而不是在构建期间应用。
此blog post 详细介绍了使用构建设置的解决方法。
【讨论】:
我结合了上述解决方案Target BeforeBuild
和这个解决方案。使用<DependentUpon>Web.Base.config</DependentUpon>
。谢谢!
@mike123 - 你能提供更详细的解释吗?看起来很有趣。我设法使用他们的用于 web.config 文件的 nuget 包与 SlowCheetah 一起工作。
@arviman 需要在两个地方更改 csproj 文件 ` ... 以上是关于调试代码时不转换 Web.config的主要内容,如果未能解决你的问题,请参考以下文章