2010-07-28 23 views
12

Tôi đang tùy chỉnh dự án .csproj để chạy một số tác vụ tùy chỉnh trước bản dựng chính. Tuy nhiên, tôi không thể hoàn thành nhiệm vụ.MS-Build BeforeBuild không bắn

Tôi uncommented thành phần <Target Name="BeforeBuild" /> trong tệp .csproj và thêm một nhiệm vụ Message đơn giản, nhưng khi tôi xây dựng, thông báo không xuất hiện trong đầu ra của tôi, vì vậy có vẻ như nhiệm vụ không chạy. Vì vậy, đoạn này không xuất ra thông báo;

Liệt kê 1: Không có tin nhắn Xuất hiện

<Target Name="BeforeBuild"> 
    <Message Text="About to build ORM layer" Importance="normal" /> 
</Target> 

Tuy nhiên, nếu tôi vít với một số các thuộc tính, tôi không thể có được .csproj để thất bại trong việc thực hiện ở tất cả;

Liệt kê 2: Một cấu hình lỗi MSBuild

<Target Name="BeforeBuild"> 
    <Message Text="About to build ORM layer" XXImportance="normal" /> 
</Target> 

Lưu ý XXImportance thuộc tính. Việc xây dựng lỗi tôi nhận được là

My.csproj(83,46): error MSB4064: The "XXImportance" parameter is not supported by the "Message" task. Verify the parameter exists on the task, and it is a settable public instance property. 

Điều này cho thấy rằng XML đang được phân tích, rằng lớp Message đã được tìm thấy, và rằng lớp đã được phản ánh qua cho các thuộc tính có sẵn.

Tại sao tác vụ không thực thi?

Tôi đang sử dụng khung 3.5.

CẬP NHẬT 1: Theo lời khuyên của @ Martin, tôi đã cố chạy MSBuild trên bảng điều khiển và gặp lỗi này;

c:\path\to\my.csproj(74,11): error MSB4019: The imported 
project "C:\Microsoft.CSharp.targets" was not found. Confirm 
that the path in the <Import> declaration is correct, and that 
the file exists on disk. 

Dòng 74 lần đọc;

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

UPDATE 2: Tôi đang biên soạn trong VS2008, trong đó sử dụng trình biên dịch C# 3, nhưng các dự án Tôi đang biên soạn là một dự án framework 2.0. Khi chạy từ dòng lệnh (xem CẬP NHẬT 1) xây dựng dường như thất bại vì có một sự nhầm lẫn về nơi mà các tập tin Microsoft.CSharp.targets được chỉ định.

Trả lời

14

Sự kiện này được bắn, nhưng bạn có thể cần phải thay đổi các thiết lập của bạn trong VS:

Tools-> Options-> Dự án và Giải pháp> Xây dựng và Run:

Và thiết MSBuild verbosity đến mức tối thiểu hoặc bình thường.

Ngoài ra, nếu bạn biên dịch qua msbuild trong bảng điều khiển, bạn sẽ thấy thông báo mà không phải thay đổi cài đặt ở trên.

+0

Xin chào, Martin. Cảm ơn rất nhiều vì câu trả lời - tôi đánh giá cao nó. Tôi đã ở mức độ tối thiểu, vì vậy tôi không nghĩ đó là điều đó. Tôi đã cố gắng biên dịch thông qua bảng điều khiển nhưng gặp lỗi - tôi đã thêm nó vào bài đăng gốc. Bất kỳ ý tưởng? –

+0

Bạn có sử dụng Visual Stuido Command Pront được tìm thấy trong Visual Studio Tools (trong Microsfot Vistual Studio 20xx) trong Start Menu-> All Program. Nó thiết lập một loạt các biến môi trường mà làm cho công việc msbuild. –

+1

Ngoài ra, bạn có thể thử. bình thường thay vì tối thiểu –

2

Có một tính năng trong Visual Studio để cho phép bạn debug MSBuild. Bạn có thể thử điều đó. Nó chính thức không được hỗ trợ nhưng hữu ích.

15

Đã xảy ra sự cố tương tự hôm nay và đã tìm ra cách làm cho nó hoạt động.

Mục tiêu Trước khi xây dựng trong của bạn.Tệp csproj được dự định là định nghĩa lại của một mục tiêu được xác định (và được tham chiếu) trong tệp Microsoft.Common.targets, được nhập bởi tệp Microsoft.CSharp.targets, tệp này được nhập bởi .csproj của bạn.

Vấn đề của bạn là dòng trong tệp .csproj nhập Microsoft.CSharp.targets là sau định nghĩa của bạn về mục tiêu BeforeBuild. Di chuyển dòng nhập vào phía trên mục tiêu BeforeBuild của bạn và mọi thứ sẽ hoạt động tốt.

Hy vọng điều đó sẽ giúp ích,

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