我有一个具有多个解决方案配置的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复制到其他文件夹中?
答案 0 :(得分:11)
之前我遇到过这个问题,我找到了解决方案。不幸的是,该解决方案并非基于强制IIS使用不同的配置名称,但如果您按照以下步骤操作,您只需选择配置并运行您的应用程序(我认为这是您需要的)。 Web.config转换将在构建之前发生,它将由转换后的Web.config替换原始Web.config。然后,当部署(到本地IIS Express)开始时,它将已经使用转换后的那个。
以下是我在一个项目(VS2012)中如何做到这一步:
<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>
在发布时防止重复转换的条件。
现在,每次运行构建时,都会根据所选配置转换Web.config。