8

tôi có cấu hình tiếp theo trong file Web.config của tôimsbuild chuyển đổi một cấu hình vài lần

<Target Name="UpdateWebConfigForProjectsBeforeRun"> 
    <ItemGroup> 
     <FilesToTransofm Include="ProjectsDeployBin\Web.*.$(Configuration).config"/>  
    </ItemGroup>  
    <Message Text="Transform file: %(FilesToTransofm.Identity)" /> 
    <TransformXml Source="web.config" 
        Transform="%(FilesToTransofm.Identity)" 
        Destination="web.config" /> 
    </Target> 

gì tôi đang cố gắng để làm nó nhận được tất cả configs từ thư mục ProjectsDeployBin và áp dụng mỗi tập tin để web.config chính.

Sau khi chuyển đổi lần đầu tiên web.config bị khóa bởi msbuild.

Vậy làm cách nào để khắc phục sự cố này? Có cách nào khác để chuyển đổi web.config của tôi bằng cách thu thập các tập tin? Cảm ơn.

Trả lời

8

Như bạn đã nhận thấy, nhiệm vụ TransformXml được giao với Visual Studio 2010 có lỗi khiến tệp nguồn bị khóa.

Để giải quyết vấn đề đó, bạn có thể tạo bản sao tạm thời của tệp nguồn trước mỗi lần chuyển đổi. Vì sau đó bạn sẽ thực hiện nhiều tác vụ cho mỗi tệp biến đổi (sao chép và chuyển đổi), bạn sẽ cần chuyển sang Target Batching thay vì Task Batching.

Ví dụ:

<ItemGroup> 
    <FilesToTransofm Include="ProjectsDeployBin\Web.*.$(Configuration).config"/>  
</ItemGroup> 

<Target Name="UpdateWebConfigForProjectsBeforeRun" 
     Inputs="@(FilesToTransofm)" 
     Outputs="%(Identity).AlwaysRun"> 
    <Message Text="Transform file: %(FilesToTransofm.Identity)" /> 
    <Copy SourceFiles="web.config" 
     DestinationFiles="web.pre-%(FilesToTransofm.Filename).temp.config" /> 
    <TransformXml Source="web.pre-%(FilesToTransofm.Filename).temp.config" 
       Transform="%(FilesToTransofm.Identity)" 
       Destination="web.config" /> 
</Target> 

Từ một thử nghiệm nhanh, có vẻ như lỗi này là cố định trong Visual Studio 2012, nhưng tôi không thể tìm thấy một tài liệu tham khảo/nguồn tài liệu đó, và original Connect bug không thể xem được nữa.

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