2011-12-06 36 views
5

Tôi đang gặp sự cố với số MSBuild Tôi không thể tự mình khắc phục sự cố. Kết quả là tôi dựa vào sự khôn ngoan của cộng đồng.Làm thế nào để MSBuild xây dựng mục tiêu tùy chỉnh được chỉ định trong csproj building sln?

Thực trạng tôi đang gặp rắc rối với

Tôi có một tập tin soluiton chứa một số dự án với sự phụ thuộc vào các dự án khác trong cùng một giải pháp. Tôi muốn nối thêm một mục tiêu tùy chỉnh vào một trong các tệp csproj của dự án và xây dựng nó từ dòng lệnh. Nó sẽ cho phép tôi tạo tất cả các tệp nhị phân đầu ra cần thiết cho dự án này để xử lý thêm trong khi xây dựng mục tiêu tùy chỉnh. Nhưng điều chính là tôi không thể tìm ra cách để làm điều đó, googling cũng không giúp được gì.

Đơn giản hoá

Để thực hiện điều đơn giản hơn tôi quyết định để thực hiện một giao diện điều khiển dự án C# mới, thêm một mục tiêu tùy chỉnh đơn giản để hồ sơ của dự án và cố gắng làm cho nó xây dựng. Vẫn không thành công! Dưới đây là những gì tôi đã thực hiện cho đến thời điểm này:

  1. Đã tạo ứng dụng giải pháp với dự án bảng điều khiển mặc định. Đây gaves tôi ít nhất hai tập tin:

    • app.sln
    • coreapp \ coreapp.csproj
  2. coreapp.csproj Modified với việc bổ sung các mục tiêu tùy chỉnh của tôi bên trong thẻ Project

    <Target Name="SampleTarget"> 
        <Message Text="This is a SampleTarget" /> 
    </Target> 
    
  3. Chạy trên dòng lệnh, lệnh sau

    %windir%\Microsoft.NET\framework\v3.5\msbuild.exe app.sln /t:coreapp:SampleTarget

    hoặc thậm chí

    %windir%\Microsoft.NET\framework\v3.5\msbuild.exe app.sln /t:coreapp.csproj:SampleTarget

Kết quả

Không may mắn, đối diện với lỗi

MSB4057: The target "coreapp.csproj:SampleTarget" does not exist in the project.

Tôi nghi ngờ rằng MSBuild nghĩ rằng somehting về cơ bản khác với những gì tôi muốn nó suy nghĩ ...

Bên cạnh đó, tôi cũng cố gắng đặt trên cùng một dòng lệnh biến môi trường MSBuildEmitSolution = 1 để buộc msbuild đổ một giải pháp tạm thời tập tin mà nó tạo ra trong khi xử lý giải pháp. Trong tập tin này, quả thực, không có mục tiêu như vậy. Tuy nhiên tôi đoán đó không phải là lý do vì tôi đã hỏi msbuild để xây dựng coreapp.proj nơi đích thực của SampleTarget.

Câu hỏi đặt ra là cách xây dựng SampleTarget trong kịch bản đơn giản này bằng cách sử dụng tệp giải pháp vì nó có thể chứa các phụ thuộc cho dự án chứa mục tiêu SampleTarget này?

Tôi sẽ rất tuyệt vời cho bất kỳ loại trợ giúp hoặc săn bắt nào để điều tra thêm!

+0

Liệu sự giúp đỡ này? http://stackoverflow.com/questions/3397460/custom-common-target-to-build-a-solution –

Trả lời

0

Một tùy chọn là buộc SampleTarget của bạn vào mục tiêu Xây dựng tiêu chuẩn thông qua ghi đè thuộc tính DependsOn thích hợp. Trong trường hợp này, bạn có thể nói với BeforeBuild rằng nó DependsOn SampleTarget hoặc bạn làm điều tương tự với AfterBuild. Điều này sẽ đảm bảo rằng MSBuild xử lý mục tiêu của bạn trước mục tiêu chuẩn được chỉ ra.

2

Thay vì chèn một mục tiêu tùy chỉnh trong tập tin dự án của bạn, bạn có thể thử tạo ra một tập tin độc lập msbuild mới, trong đó sẽ:

  • xây dựng các tập tin giải pháp (trong đó xây dựng dự án)
  • xác định mục tiêu phụ của bạn

Gọi nó là app-custom-Debug.msbuild, ví dụ:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WorkingFolder>$(MSBuildProjectDirectory)</WorkingFolder> 
    <Configuration>Debug</Configuration> 
    <SolutionFile>app.sln</SolutionFile> 
    </PropertyGroup> 

    <Target Name="Build" DependsOnTargets="Compile" /> 

    <Target Name="Compile"> 
    <Message Text="=== COMPILING $(Configuration) configuration ===" /> 
    <MSBuild Projects="$(SolutionFile)" 
      Properties="Configuration=$(Configuration)" /> 
    </Target> 

    <Target Name="SampleTarget"> 
    <Message Text="This is a SampleTarget" /> 
    </Target> 

</Project> 

Sau đó, bạn thực hiện:

msbuild.exe app-custom-Debug.msbuild /t:SampleTarget 
Các vấn đề liên quan