Tôi cố gắng để chuyển đổi tất cả các file web.config trong một dự án tôi có, đây là một cấu trúc cây của tôi:Làm cách nào để có tác vụ msbuild thực hiện chuyển đổi cấu hình trên tập hợp các tệp?
- Transform.bat
- Transforms
- ConfigTransform.proj
- Web .Transform.config
- website
- web.config
- Lần
- web.config
Có nhiều file web.config, nhưng ý tưởng là điều này sẽ tìm thấy tất cả trong số họ và áp dụng cùng một cấu hình chuyển đổi về họ.
Tôi đã lấy một vài gợi ý từ a blog post I found nhưng tôi gặp khó khăn trong bước cuối cùng, việc chuyển đổi thực tế. Ngoài ra có một chút phần thô ở giữa mà tôi không thực sự thích (Tôi không hoàn toàn hiểu những gì tôi đang làm và tôi rõ ràng là làm sai). Đây là nơi tôi cho đến nay:
<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml" AssemblyFile="Tools\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<SitePath>..\..\Website</SitePath>
<WebConfigTransformInputFile>$(SitePath)\Web.config</WebConfigTransformInputFile>
<WebConfigTransformFile>Web.Transform.config</WebConfigTransformFile>
<OutDir>..\N\N\</OutDir>
</PropertyGroup>
<ItemGroup>
<_FilesToTransform Include="$(SitePath)\**\web.config"/>
</ItemGroup>
<Target Name="Transform">
<MakeDir Directories="@(_FilesToTransform->'$(OutDir)%(RelativeDir)')" />
<TransformXml Source="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
Transform="$(WebConfigTransformFile)"
Destination="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" />
</Target>
</Project>
My Transform.bat trông như thế này:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
Vì vậy, khi tôi gọi là hàng loạt, các thư mục thích hợp được tạo ra. Tuy nhiên, như bạn có thể thấy tôi đã có một chút sáng tạo với OutDir, làm cho nó .. \ N \ N. Vì một lý do nào đó, nếu tôi không làm điều này, đường dẫn OutDir sẽ hoàn toàn giống với thư mục đầu vào. Vì vậy, tôi rõ ràng là cần phải thay đổi một cái gì đó trong MakeDir nhưng tôi không chắc chắn những gì.
Sự cố thực sự xảy ra khi bắt đầu thực hiện các biến đổi. Tôi đã cố gắng giữ cho thông số Nguồn Biến đổi như thế này hoặc như vậy:
@(_FilesToTransformNotAppConfig->'%(FullPath)')
Trường hợp sau cung cấp cho tôi lỗi "Không thể mở tệp nguồn: Định dạng đường dẫn đã cho không được hỗ trợ". và cựu mang lại cho tôi kết quả này:
Build started 30-4-2012 14:02:48.
Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" on node 1 (default targets).
Transform:
Creating directory "..\N\N\..\..\Website\Views\".
Transforming Source File: ..\N\N\..\..\Website\Views\Web.config;..\N\N\..\..\Website\Web.config
D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj(32,2): error : Could not open Source file: Could not find a part of the path 'D:\Dev\transform\DoTransforms\Website\Views\Web.config;\Website\Web.config'.
Transformation failed
Done Building Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" (default targets) -- FAILED.
Build FAILED.
Để tóm tắt câu hỏi của tôi:
- Làm thế nào để tránh những vấn đề đường dẫn cho các OutDir? Tôi đã không có nhiều đường dẫn nhưng tôi không thể làm đúng.
- Làm cách nào để tác vụ TransformXml chấp nhận nhiều tệp trong thuộc tính Nguồn?
Trước khi đi vào nơi bạn đang ở, bạn có thể giải thích bạn đang cố gắng làm gì không? –
Chuyển đổi tất cả các tệp cấu hình trong giải pháp của tôi. – sebastiaan
Làm rõ trong bài (dưới cấu trúc cây). – sebastiaan