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

我有一个主要的Web.config 文件,在它下面有一个Web.Test.configWeb.Development.Config 等。

当我在测试配置中通过 SlowCheetah 预览转换时,它似乎正确地转换了值。

当我将构建环境从开发切换到测试并尝试调试应用程序时,应用程序会在主 Web.config 文件中的任何值下运行(即它不会转换任何东西)。

如何让构建环境在调试时选择正确的配置,而不是总是使用基本的Web.config 文件?这可能吗?

【问题讨论】:

    标签: c# visual-studio visual-studio-2015 app-config slowcheetah


    【解决方案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 ... `
    猜你喜欢
    • 2012-12-24
    • 2011-02-28
    • 2019-08-12
    • 2014-05-18
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多