2015-07-21 14 views
5

Tôi có một giải pháp bao gồm ba dự án web (cũng như nhiều dự án thư viện lớp). Tất cả các dự án web đều sử dụng các biến đổi Web.config để chỉ định cấu hình cho mỗi môi trường.Chuyển đổi Web.config đang chạy hai lần trên xuất bản

Tôi có Web.config biến cho nhiều build cấu hình, tên Web.UAT.config, Web.Staging.config và Web.Release.config

Tôi đang xây dựng và triển khai dự án từ máy chủ CI của tôi sử dụng MSBuild với các đối số sau đây:

/t:Clean,Build /p:Configuration=UAT;DeployOnBuild=True;PublishProfile=UAT 

Đối với chính xác một trong ba dự án, web.config biến đổi xuất hiện để áp dụng hai lần, với các yếu tố đánh dấu xdt:Transform="Insert" xuất hiện hai lần. Nhìn trong xây dựng đầu ra, có vẻ như cả ba dự án chạy các mục tiêu sau đây:

PreTransformWebConfig 
TransformWebConfigCore 
PostTransformWebConfig 
PreProfileTransformWebConfig 

Nhưng dự án có vấn đề cũng chạy các mục tiêu này (ngay sau khi những người được liệt kê ở trên):

ProfileTransformWebConfigCore 
PostProfileTransformWebConfig 

Trả lời

5

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 ProjectProfileTransformFileNameProjectConfigTransformFileName 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 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.

0

Sự cố này xảy ra với tôi vì tôi có nhiều dự án trong cấu hình giải pháp của mình bằng các cấu hình khác nhau.

Nó đã tiêu tốn hơn một web.config biến vì cấu hình này:

Configuration Manager

Sau khi chuyển đổi các dự án sử dụng cấu hình tương tự tôi không còn nhận được những vấn đề trong web.config của tôi.

Các vấn đề liên quan