在调试期间使用转换的Web.config和IIS Express

时间:2015-03-17 08:23:16

标签: visual-studio visual-studio-2012 iis msbuild web-config

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

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

转换后的.config文件很完美,但IIS Express仍然使用根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应用程序的Web.Debug.Config适用于我们大多数人,但不是全部。

在本地调试期间,必须有一种让IIS Express使用转换后的Web.Debug-DeveloperName.config的方法吗?

是否必须将转换后的Web.config复制到其他文件夹中?

1 个答案:

答案 0 :(得分:11)

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

以下是我在一个项目(VS2012)中如何做到这一步:

  1. 右键单击项目并选择卸载
  2. 再次右键单击它并选择编辑
  3. 转到文件的底部,然后在“”标记的右侧添加以下内容(它将是最后一项)
  4. <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. 保存文件,右键单击并选择“重新加载”
    2. 现在,每次运行构建时,都会根据所选配置转换Web.config。