Các .csproj
file cho các dự án web bao gồm những điều sau theo mặc định:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
Tệp này lần lượt nhập \Web\Microsoft.Web.Publishing.targets
, cũng theo VSToolsPath (trên máy dev của tôi, điều này tương ứng với C:\Program Files (x86)\MSBuild\VisualStudio\v12.0
).
Phân khúc hấp dẫn của tập tin này trông giống như sau:
<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>
Các đôi biến đổi đã xảy ra như là kết quả của ProfileTransformWebConfigCore
chạy, đó là điều kiện trên ProfileTransformWebConfigEnabled
, mà chỉ mặc định là false nếu ProjectProfileTransformFileName
và ProjectConfigTransformFileName
bằng nhau.
tôi đã thêm các mục tiêu sau đây để cả ba dự án của tôi:
<Target Name="DebugWebConfigTransform" AfterTargets="PreProfileTransformWebConfig">
<Message Text="ProjectProfileTransformFileName: $(ProjectProfileTransformFileName)"/>
<Message Text="ProjectConfigTransformFileName: $(ProjectConfigTransformFileName)"/>
</Target>
Đối với các dự án có vấn đề, sản lượng mục tiêu này như sau:
DebugWebConfigTransform:
ProjectProfileTransformFileName: Web.UAT.config
ProjectConfigTransformFileName: Web.Release.config
Kể từ khi hai giá trị này là khác nhau, đôi biến đổi đã xảy ra vì những lý do được mô tả ở trên.
Lý do ProjectConfigTransformFilename được đặt thành Web.Release.config là ProjectConfigurationPlatforms
trong tệp .sln
của tôi không chính xác. Cấu hình của .sln
| Cặp nền tảng UAT|Any CPU
đang được ánh xạ tới Release|Any CPU
cho dự án này.
Tôi nghĩ rằng thực tế đã áp dụng biến đổi phát hành UAT và do tính chất chính xác của các biến đổi của tôi và thứ tự chúng được áp dụng, điều này không thể phân biệt được khi áp dụng phép biến đổi UAT hai lần).
Cập nhật ánh xạ ProjectConfigurationPlatforms
trong tệp giải pháp đã giải quyết được sự cố cho tôi.