在调试期间将转换后的 Web.config 与 IIS Express 一起使用

Using transformed Web.config with IIS Express during debug

我有一个具有多个解决方案配置的 Visual Studio 应用程序。每个配置都有一个 Web.config 转换文件。例如Web.Debug.config、Web.Release.config等

我们也有几个开发人员从事这个项目,由于他们安装 SQL Express 的方式而不是让他们不断编辑 Web.Debug.config 到 运行 在他们的环境中,我已经为他们每个人设置了一个解决方案配置,并将以下内容添加到 .csproj 文件的最底部。此代码确实有效,因为它会触发在 VS /obj/Debug-DeveloperName/ 文件夹中创建 Web.config 和 MyWebApp.dll.config。

转换后的.config文件是完美的,但IIS Express仍然使用root Web.config(未转换)。

有没有办法让 IIS Express 在本地调试时使用这些转换后的 Web.config 文件?

<UsingTask 
    TaskName="TransformXml"
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />

<Target 
    Name="AfterCompile" 
    Condition="exists('Web.$(Configuration).config')">

    <!-- Generate transformed config in intermediate directory -->
    <TransformXml 
        Source="Web.config" 
        Destination="$(IntermediateOutputPath)$(TargetFileName).config"
        Transform="Web.$(Configuration).config" 
    />
</Target>

使用网络应用程序的 Web.Debug.Config 适合我们大多数人,但并非所有人。

一定有办法让 IIS Express 在本地调试期间使用转换后的 Web.Debug-DeveloperName.config 吗?

转换后的 Web.config 是否必须复制到不同的文件夹中?

我以前遇到过这个问题,我找到了解决办法。不幸的是,该解决方案不是基于强制 IIS 使用不同的配置名称,但如果您按照以下步骤操作,您将只 select 配置和 运行 您的应用程序(这就是您需要的我思考)。 Web.config 转换将在构建之前发生,它将用转换后的 Web.config 替换原来的 Web.config 。然后,当部署(到本地IIS Express)开始时,它已经使用了转换后的。

这是我在一个项目 (VS2012) 中一步步完成的:

  1. 右键单击项目并select卸载
  2. 再次右键单击它并select编辑
  3. 转到文件底部并将以下内容附加到“”标签的右侧(这将是最后一项)
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>

发布时防止重复转换的条件

  1. 保存文件,右键单击它并select重新加载

现在,每次 运行 构建时,您的 Web.config 都会根据 selected 配置进行转换。