2012-09-14 30 views
5

Tôi sử dụng SlowCheetah để chuyển đổi app.configs của mình. Tôi có một giải pháp đa dự án trong đó một trong các dự án thực hiện một sự kiện sau khi xây dựng, nơi đầu ra của thùng được sao chép ở nơi khác. Tôi đã tìm thấy rằng SlowCheetah hiện nó biến đổi sau khi sự kiện sau xây dựng, do đó, app.config tôi sao chép là phiên bản trước khi chuyển đổi.SlowCheetah thực hiện sau khi sự kiện sau khi xây dựng

Có ai có đề xuất về cách tôi có thể thực hiện bản sao của mình sau khi SlowCheetah biến đổi không? Điều này sẽ yêu cầu tôi viết một nhiệm vụ xây dựng tùy chỉnh?

+0

Tôi đã tìm thấy giải pháp thay thế. Nó không thanh lịch, nhưng nó hoạt động. Tôi đã tạo ra một dự án giả và thiết lập sự phụ thuộc của nó để xây dựng sau dự án mà tôi đã có các sự kiện sau xây dựng. Tôi đã chuyển sự kiện sao chép sau khi xây dựng từ dự án gốc sang dự án giả mới này. Điều này làm việc vì SlowCheetah đã thực hiện công việc của nó. – ScottC

Trả lời

4

Nếu bạn đang sử dụng msbuild 4.0 để xây dựng các dự án của mình - bạn có thể móc vào các mục tiêu chậm chạp với các thuộc tính AfterTargets BeforeTargets mới.

Tôi không biết chính xác những gì nhắm mục tiêu tên mà bạn muốn treo sau nhưng mã này có thể đưa cho bạn khái niệm cơ sở như thế nào để làm điều này

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Some_Target_Name" AfterTargets="TransformAllFiles" > 
      <Message Text="= Script here will run after SlowCheetah TransformAllFiles ="/> 
    </Target> 
<Project> 

được sửa đổi: Tôi đã cài đặt SlowCheetah và thấy rằng AfterTargets thuộc tính cần được "TransformAllFiles" . Chỉ cần thiết lập sự phụ thuộc mục tiêu của bạn AfterTargets="TransformAllFiles"

2

câu trả lời Alexey của dẫn đến giải pháp đúng nhưng ở đây nó là đầy đủ:

  • Kích chuột phải vào dự án của bạn và chọn Unload Project
  • Bây giờ kích chuột phải vào dự án và chọn Edit [your project name].csproj
  • Cuộn xuống dưới cùng và bỏ ghi chú mục tiêu có tên AfterBuild và thêm thuộc tính này AfterTargets="TransformAllFiles"
  • Di chuyển bài của bạn xây dựng các hành động vào mục tiêu này bằng cách sử dụng lệnh Exec:

Một ví dụ:

<Target Name="AfterBuild" AfterTargets="TransformAllFiles"> 
<Exec Command="ECHO Hello PostBuild World!" /> 
</Target> 
0

Tôi đã tình cờ gặp vấn đề này quá ... đã quyết định nâng cấp lên phiên bản mới nhất của SlowCheetah (hiện tại 2.5.8), và vấn đề này dường như đã được sửa! Không còn vấn đề gì khi sử dụng các sự kiện hậu xây dựng để triển khai một dự án với XML đã được chuyển đổi!

Sau quá trình nâng cấp gói NuGet, tôi có một vấn đề lạ, mặc dù ... biến đổi không còn xảy ra nữa. Chỉnh sửa dự án như Naeem Sarfraz gợi ý, tôi đã thấy rằng phần PropertyGroup của SlowCheetah được đặt ở cuối của .csproj.

Nó chỉ là vấn đề di chuyển nó lên đầu, gần các phần PropertyGroup khác, và bây giờ nó hoạt động như một sự quyến rũ!

0

Nếu bạn cần sao chép/di chuyển các tệp .config khác (ngoài web.config) xung quanh sau khi xây dựng trước khi xuất bản ở đây là làm thế nào nó có thể được thực hiện với Visual Studio 2013 (tôi đã không thử nghiệm nó trên phiên bản trước đó) . Phần này có thể được thêm vào cuối tệp .csproj ngay trước thẻ đóng </Project > và nó sẽ được kích hoạt ngay trước khi MSDeploy bắt đầu quá trình xuất bản.

<Target Name="MoveConfigFile" BeforeTargets="MSDeployPublish"> 
    <Move 
     SourceFiles="$(IntermediateOutputPath)Package\PackageTmp\ThirdPartyApp.config" 
     DestinationFolder="$(IntermediateOutputPath)Package\PackageTmp\bin" 
     OverwriteReadOnlyFiles="true" 
    /> 
</Target> 

Công ty tôi làm việc cho mua một sản phẩm của bên thứ ba mà cần phải có một file .config trong bin thư mục cùng với lắp ráp của nó để làm việc.

Đồng thời chúng ta cần phải xử lý tập tin .config của sản phẩm và có thể di chuyển nó đến bin thư mục sau khi biến đổi.

Gói $ (IntermediateOutputPath) \ PackageTmp chứa toàn bộ ứng dụng sẽ được sao chép trên máy chủ đích.

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