调试代码时不转换 Web.config

Posted

技术标签:

【中文标题】调试代码时不转换 Web.config【英文标题】:Web.config is not transformed when debugging code 【发布时间】:2016-06-04 05:06:22 【问题描述】:

我有一个主要的Web.config 文件,在它下面有一个Web.Test.configWeb.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,则不必使用 根据链接提供的应该更新以纠正双重转换问题。 “更新:从 cmets 中的提醒中,我意识到在发布项目时,Visual Studio 两次转换 XML 也存在问题。解决方案是向目标标记添加条件,如下所示: "【参考方案2】:

XML 转换只会在您发布 Web 应用程序时应用,而不是在构建期间应用。

此blog post 详细介绍了使用构建设置的解决方法。

【讨论】:

我结合了上述解决方案Target BeforeBuild和这个解决方案。使用&lt;DependentUpon&gt;Web.Base.config&lt;/DependentUpon&gt;。谢谢! @mike123 - 你能提供更详细的解释吗?看起来很有趣。我设法使用他们的用于 web.config 文件的 nuget 包与 SlowCheetah 一起工作。 @arviman 需要在两个地方更改 csproj 文件 ` ... Web.config ... `

以上是关于调试代码时不转换 Web.config的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse“Enhanced Class Decompiler”插件在调试时不反编译

属性存在于调试器中,但在编译时不存在

手机调试Android程序出异常时不打印堆栈信息

GAE项目Intellij远程调试在关闭时不释放端口

使用JAVA调用ffmpeg组件进行视频转换时不成功

SQL 代码在转换为 JPQL 代码时不起作用(ORA-00904 错误代码)