hgc*_*ngs 6 .net asp.net msbuild
我有一个解决方案,包括三个Web项目(以及许多类库项目).Web项目都使用Web.config转换来指定每个环境的配置.
我有Web.config转换多个构建配置文件,名为Web.UAT.config,Web.Staging.config和Web.Release.config
我正在使用带有以下参数的MSBuild从我的CI服务器构建和部署项目:
/t:Clean,Build /p:Configuration=UAT;DeployOnBuild=True;PublishProfile=UAT
Run Code Online (Sandbox Code Playgroud)
对于三个项目中的一个,web.config转换似乎应用两次,标记的元素xdt:Transform="Insert"出现两次.查看构建输出,似乎所有三个项目都运行以下目标:
PreTransformWebConfig
TransformWebConfigCore
PostTransformWebConfig
PreProfileTransformWebConfig
Run Code Online (Sandbox Code Playgroud)
但有问题的项目也会运行这些目标(紧接在上面列出的目标之后):
ProfileTransformWebConfigCore
PostProfileTransformWebConfig
Run Code Online (Sandbox Code Playgroud)
.csprojWeb项目的文件默认包括以下内容:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
Run Code Online (Sandbox Code Playgroud)
这个文件反过来导入\Web\Microsoft.Web.Publishing.targets,也在VSToolsPath下(在我的dev机器上,这对应C:\Program Files (x86)\MSBuild\VisualStudio\v12.0).
这个文件的有趣部分如下所示:
<ProjectProfileTransformFileName Condition="'$(ProjectProfileTransformFileName)'=='' And '$(PublishProfileName)' != '' ">$(_ProjectConfigFilePrefix).$(PublishProfileName)$(_ProjectConfigFileExtension)</ProjectProfileTransformFileName>
<!--if $(TransformWebConfigEnabled) is also enabled and the ConfigTransform and ProfileTransform happen to have same filename, we default $(ProfilefileTransformWebCofnigEnabled) to false so it doesn't do double transform-->
<ProfileTransformWebConfigEnabled Condition="'$(ProfileTransformWebConfigEnabled)'=='' And '$(TransformWebConfigEnabled)' == 'true' And ('$(ProjectProfileTransformFileName)' == '$(ProjectConfigTransformFileName)')">False</ProfileTransformWebConfigEnabled>
Run Code Online (Sandbox Code Playgroud)
双变换是由于ProfileTransformWebConfigCore运行而发生的,这是有条件的ProfileTransformWebConfigEnabled,如果ProjectProfileTransformFileName和ProjectConfigTransformFileName相等则只默认为false .
我将以下目标添加到我的所有三个项目中:
<Target Name="DebugWebConfigTransform" AfterTargets="PreProfileTransformWebConfig">
<Message Text="ProjectProfileTransformFileName: $(ProjectProfileTransformFileName)"/>
<Message Text="ProjectConfigTransformFileName: $(ProjectConfigTransformFileName)"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
对于有问题的项目,此目标输出以下内容:
DebugWebConfigTransform:
ProjectProfileTransformFileName: Web.UAT.config
ProjectConfigTransformFileName: Web.Release.config
Run Code Online (Sandbox Code Playgroud)
由于这两个值不同,出于上述原因发生了双变换.
ProjectConfigTransformFilename设置为Web.Release.config的原因是ProjectConfigurationPlatforms我的.sln文件中的错误.该.sln文件的配置|平台对UAT|Any CPU被映射到Release|Any CPU这个项目.
我认为它实际上是应用UAT 和 Release变换(由于我的变换的确切性质和它们的应用顺序,这与应用UAT变换两次无法区分).
更新ProjectConfigurationPlatforms解决方案文件中的映射为我解决了这个问题.
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |