2013-08-30 42 views
6

Tôi đã cài đặt gói SlowCheetah qua nuget và thêm các tệp biến đổi cho web.config của tôi dựa trên Xây dựng cấu hình. Tuy nhiên, khi xây dựng, web.config không được chuyển đổi. Tôi đã kiểm tra tệp dự án của mình và đã thấy các mục nhập cho các phần tử thuộc tính và các phần tử ImportCheetah của SlowCheetah. Tôi không thấy mục tiêu để chuyển đổi trong tệp dự án. Nếu tôi thêm app.config, tệp app.config sẽ được chuyển đổi. Đó là sự hiểu biết của tôi rằng việc cài đặt gói SlowCheetah sẽ tự động thêm mục tiêu biến đổi web.config vào tệp MSBuild cho dự án. Tôi có thể thêm nó bằng tay nhưng tôi nghĩ SlowCheetah làm điều đó ra khỏi hộp. Tôi có thiếu gì đó không. Xin vui lòng cho tôi biết. Yêu cầu của tôi là tệp web.config của tôi sẽ được chuyển đổi dựa trên cấu hình xây dựng và tệp web.config được chuyển đổi phải được đặt trong thư mục đầu ra. Cảm ơn và đánh giá cao tất cả sự giúp đỡ.SlowCheetah không chuyển đổi web.config trên bản dựng

Trả lời

0

Bạn đã đặt thuộc tính "sao chép sang thư mục đầu ra" của tệp biến đổi thành "Không sao chép"? Vui lòng kiểm tra tệp dự án của bạn.

Trong tập tin dự án của bạn các mục sau đây nên được bổ sung (tùy phiên bản mà bạn cài đặt, trong trường hợp này 2.5.7):

<PropertyGroup Label="SlowCheetah"> 
<SlowCheetah_EnableImportFromNuGet Condition=" '$(SC_EnableImportFromNuGet)'=='' ">true</SlowCheetah_EnableImportFromNuGet> 
<SlowCheetah_NuGetImportPath Condition=" '$(SlowCheetah_NuGetImportPath)'=='' ">$([System.IO.Path]::GetFullPath($(MSBuildProjectDirectory)\..\packages\SlowCheetah.2.5.7\tools\SlowCheetah.Transforms.targets))</SlowCheetah_NuGetImportPath> 
<SlowCheetahTargets Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='true' and Exists('$(SlowCheetah_NuGetImportPath)') ">$(SlowCheetah_NuGetImportPath)</SlowCheetahTargets> 

<Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" Label="SlowCheetah" /> 
+1

Đối với bất cứ ai xem, đây là 100% chính xác cho một phiên bản hiện tại của SlowCheetah. – EKW

9

Visual Studio đang làm chuyển đổi chỉ khi bạn triển khai dự án của mình bằng cách sử dụng chức năng xuất bản. Để làm điều đó khi bạn làm việc xây dựng, bạn cần phải chỉnh sửa kịch bản MSBuild của bạn. Giải pháp hoàn chỉnh là here. Dưới đây là các yếu tố cần thiết:

Tệp trong dự án Tạo tệp có tên Web.Base.config, ngoài Web hiện tại.Debug.config và Web.Release.config. Tệp này sẽ là tương đương với Web.config cũ của bạn, vì nó sẽ là cơ sở cho sự chuyển đổi . Bạn sẽ kết thúc với những tệp này:

Web.config, Web.Base.config, Web.Debug.config, Web.Release.config và Web.config. Thêm cấu hình sau vào dưới cùng của csproj-file của bạn, ngay trước khi bế mạc -tag:

<Target Name="BeforeBuild"> 
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
</Target> 

UPDATE: Từ một lời nhắc nhở trong các ý kiến ​​tôi nhận ra rằng tôi cũng có một vấn đề với Visual Studio chuyển đổi XML hai lần, khi xuất bản một dự án. Các giải pháp này là thêm một điều kiện để các Target-tag như thế này:

<Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''"> 
+2

Về giải pháp, cho Visual Studio 2013, bạn không cần vì tác vụ đã được nhập. – MikeJansen

+0

Cảm ơn bạn đã chia sẻ. –

+0

yas yas yas yas ! – TWilly

3

Để xây dựng trên câu trả lời của Philipp Tôi đã tìm thấy một giải pháp đơn giản càng tốt: Không cần cho một Web.Base.Config và không có vấn đề với ghi đè lên web.config của bạn mà gây ra vấn đề trong Source Control.

Trước khi xây dựng: Bạn đặt đích cho TargetDir en TargetFileName.

Sau khi xây dựng: Bạn sao chép điều này vào các trang web đã xuất bản của mình sau khi quá trình xây dựng hoàn tất.

<Target Name="BeforeBuild"> 
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="$(TargetDir)$(TargetFileName).config" /> 
</Target> 
<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Dev' Or '$(Configuration)' == 'Test' Or '$(Configuration)' == 'Prod'"> 
    <Delete Files="$(TargetDir)_PublishedWebsites\$(ProjectName)\Web.config" /> 
    <Copy SourceFiles="$(TargetDir)$(TargetFileName).config" DestinationFiles="$(TargetDir)_PublishedWebsites\$(ProjectName)\Web.config" /> 
</Target> 
+0

Bạn có thể giải thích tại sao việc xây dựng sẽ không thay thế tệp cấu hình đã được sao chép ở đó trước khi xây dựng? Bởi vì tôi không thể làm việc này, và tôi nghĩ đó là vì tập tin bị ghi đè. –

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