2013-02-24 30 views
20

Tôi muốn xây dựng một .vcxproj qua msbuild từ bên ngoài Visual Studio. Vấn đề là có rất nhiều $ (SolutionDir) bên trong Tệp .vcxproj dường như chỉ được đặt chính xác khi giải pháp được tải.

Khi tôi thay thế $ (SolutionDir) với đường dẫn absolut thực tế nó hoạt động, vấn đề là người khác trên các máy khác đang làm việc với các tập tin cùng một dự án ...

Có ai biết bất kỳ giải pháp hay hack để giải quyết vấn đề?

Cảm ơn, mọi trợ giúp đều được đánh giá cao.

Simon

Trả lời

30

Bạn có thể thiết lập các biến bằng cách truyền đối số tham số:

/p:SolutionDir=path 

Vì vậy, chứ không phải chỉnh sửa các tập tin dung dịch, bạn có thể tạo một kịch bản xây dựng mà thiết lập môi trường và thực hiện msbuild phù hợp , để tệp Visual Studio như là dành cho công việc phát triển.

6

Bạn có thể sử dụng đường dẫn tương đối. Không chắc chắn về VS2010 như trong câu hỏi nhưng nó đảm bảo hoạt động kể từ VS2012. Nếu thư mục dự án nằm ngay dưới thư mục giải pháp thì đường dẫn tương đối là .. \ Điều này bằng cách kết hợp với đối số tham số từ câu trả lời trước.

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> 
+0

Traversing up directories không hoạt động trong TFS checkin builds khi ghi đè .target chẳng hạn. Cần đường dẫn tuyệt đối. – Shiv

+0

Hãy nêu rõ điều này nên đi vào phần tử '' của tệp '* .csproj' có liên quan. Tôi cảm thấy đây là một phần thông tin quan trọng còn thiếu trong câu trả lời của bạn. –

5

Giải pháp để rõ ràng vượt qua SolutionDir làm đối số không đủ cho tôi. Cụ thể, nếu dự án tôi muốn xây dựng có phụ thuộc với các cấu hình xây dựng khác nhau, bản dựng không thành công với lỗi This project doesn't contain the Configuration and Platform combination of <my target configuration>. Điều này có ý nghĩa, vì tôi không chỉ định cấu hình đích cho các phụ thuộc và do đó nó cố gắng nhắm mục tiêu cấu hình tương tự như dự án tôi đang xây dựng, mà chúng không có (trong trường hợp của tôi).

Vì tệp giải pháp chứa cấu hình xây dựng cho tất cả các dự án trong giải pháp (được cung cấp một số giải pháp cấu hình), chúng tôi muốn tận dụng giải pháp này để giải quyết vấn đề này. May mắn thay, msbuild cho phép chúng ta xây dựng một giải pháp và truyền một dự án mục tiêu cụ thể làm đối số, điều này sẽ chỉ khiến dự án đó được xây dựng (cùng với các phụ thuộc của nó).

msbuild MySolution.sln /t:MyProject 
Các vấn đề liên quan