2008-11-05 44 views
5

Tôi có một tình huống mà tôi muốn sao chép cụm đầu ra từ một dự án vào thư mục đầu ra của ứng dụng đích của tôi bằng MSBuild, mà không có đường dẫn mã hóa cứng trong MSBuild của tôi Sao chép tác vụ. Đây là kịch bản:MSBuild sao chép đầu ra từ dự án khác vào đầu ra của dự án hiện tại

  • Project A - Web Application Project
  • Dự án B - Dự án Giao diện Dal
  • Dự án C - Dal Thực hiện Dự án

Có một lớp kinh doanh cũng vậy, nhưng không có liên quan đến vấn đề MSBuild tôi đang tìm cách giải quyết.

Lớp doanh nghiệp của tôi có tham chiếu đến dự án Dal.Interface của tôi. Dự án web của tôi có một tham chiếu đến lớp Business và khi nó đứng, việc xây dựng sẽ kéo lớp kinh doanh và các dự án Dal.Interface vào đầu ra. Càng xa càng tốt. Bây giờ để ứng dụng web chạy, nó cần thực hiện Dal. Tôi không muốn triển khai tham chiếu ở bất kỳ đâu vì tôi muốn thực thi mã hóa cho giao diện và không có tham chiếu nghĩa là nó sẽ không hiển thị trong intellisense, v.v.

Vì vậy, tôi đã tìm tôi có thể xử lý thông qua bản sao MSBuild hoạt động như một tác vụ AfterBuild (Tôi có thiết lập triển khai Dal để xây dựng khi dự án web xây dựng, chỉ cần không tham chiếu). Tôi không muốn các đường dẫn mã cứng hoặc bất cứ thứ gì khác trong các tham số MSBuild, vì vậy tôi đang cố gắng tìm ra cách tham chiếu đầu ra của dự án Dal từ tệp MSBuild của Dự án Ứng dụng Web.

Vì vậy, dựa trên các dự án nêu trên đây là những gì tôi muốn thấy xảy ra:

  1. Web ứng dụng xây dựng được khởi công
  2. Tất cả các dự án cần xây dựng (đã được cấu hình, vì vậy đây được thực hiện)
  3. Tác vụ MSBuild "AfterBuild" khởi động và đầu ra từ Dự án C (Thực hiện Dal) được sao chép vào thư mục Bin của Dự án A (ứng dụng web)

Phần 3 là nơi tôi bị kẹt.

Tôi chắc chắn điều này có thể được thực hiện, tôi chỉ không tìm thấy một tài liệu tham khảo tốt để giúp đỡ. Cảm ơn trước sự giúp đỡ nào.

Trả lời

8

Tôi đã thực hiện công việc này, mặc dù tôi rất muốn tìm một giải pháp sạch hơn để thực hiện các thông số tích hợp trong MSBuild (như $ (TargetDir), v.v. cho). Dù sao, đây là những gì tôi đã làm:

<Target Name="AfterBuild"> 
<Copy SourceFiles="$(SolutionDir)MyProject.Dal.Linq\bin\$(Configuration)\MyProject.Dal.Linq.dll" DestinationFolder="$(TargetDir)"/> 
</Target> 

Tôi rất muốn thấy một giải pháp sạch hơn, nhưng điều này nên làm ngay bây giờ.

+0

Tôi đã +1 tuổi này trước đây. Vì bạn đã đề xuất điều này là không sạch - rõ ràng điều này sẽ vi phạm nếu OutDir thay đổi, ví dụ: khi xây dựng với TeamBuild. (Chỉ trong trường hợp những người khác thấy điều này và không nhận ra những thiếu sót). Xem thêm http://stackoverflow.com/questions/2325598/determining-outputs-of-a-projectreference-in-msbuild/2325620#2325620 –

+0

Xem http: // stackoverflow.com/questions/2325598/xác định-kết quả đầu ra-of-a-projectreference-in-msbuild/2325620 # 2325620 cho ví dụ về cách giải quyết mối quan tâm tôi đã đề cập –

0

Vì vậy, bạn muốn có tham chiếu nhưng không hiển thị tham chiếu trong VS. Vì vậy, bạn muốn nó được xây dựng nếu cần, và sao chép vào đầu ra giống như bất kỳ tập tin Content nào khác. Dưới đây là cách bạn muốn thực hiện:

<Target Name="IncludeDALImplementation" BeforeTargets="AfterBuild"> 
    <MSBuild Projects="..\DalImplementation\DAL.csproj" BuildInParallel="$(BuildInParallel)" Targets="Build"> 
    <Output TaskParameter="TargetOutputs" ItemName="DalImplementationOutput" /> 
    </MSBuild> 

    <ItemGroup> 
    <Content Include="@(DalImplementationOutput)" /> 
    </ItemGroup> 
</Target> 
+0

Tôi nhận được lỗi này: Tác vụ "Nội dung" là không tìm thấy.' khi biên dịch trong Visual Studio – Thorarin

+0

@Thorarin: Cố định mã, xin lỗi về điều đó. Lưu ý rằng nó vẫn chưa được kiểm tra – Jonathan

+0

Tôi đã thực hiện thay đổi tương tự và nó đã hoạt động. Tôi cần phải sao chép các phụ thuộc cũng như đầu ra của bản thân dự án, vì vậy tôi phải thay đổi cách tiếp cận của mình một chút. – Thorarin

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