2009-01-27 33 views
18

Tôi cần tạo phiên bản demo của một ứng dụng lớn hiện có bao gồm nhiều dự án. Tôi muốn sử dụng các dự án hiện có, và chỉ cần thiến các chức năng thông qua các chỉ thị tiền xử lýXác định giá trị tiền xử lý từ dòng lệnh bằng cách sử dụng MSBuild

#if DEMO 
    mycode.NeuterNow(); 
#endif 

Chúng tôi đang xây dựng ứng dụng của chúng tôi sử dụng MSBuild, và tôi tưởng muốn sử dụng một cái gì đó dọc theo dòng:

MSBuild -DefineProperty:DEMO MySolution.sln 

Chức năng này có tồn tại không?

Trả lời

9

That's a duplicate of this one và yes//: DefineConstants hoạt động tốt và trình cấu hình đúng, điều này sẽ ghi đè TẤT CẢ các ký hiệu có điều kiện đã được xác định trong Tệp dự án (IMHO tốt), vì vậy bạn sẽ phải xác định tất cả .

+0

Có cách nào để không ghi đè không? – Tsury

14

Hãy thử

msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln 

Bạn phải bao gồm DEBUG hoặc phát hành và bất kỳ hằng khác đã được xác định trong file giải pháp, nhưng tôi nghĩ rằng điều này sẽ làm việc. Disclaimer: Tôi chưa bao giờ thực sự thử nó bản thân mình.

+0

/p: DefineConstants = DEMO thứ hai ":" cần phải là "=" – BrianH

+0

Cảm ơn, tôi đã khắc phục câu trả lời. – configurator

3

Tôi phát hiện ra điều gì đó thú vị khi theo đuổi giải pháp của riêng mình cho vấn đề này và tôi nghĩ mình sẽ chia sẻ.

Chỉ thị/p trong MSBuild không giới hạn đối với các thuộc tính đã tồn tại trong tệp xây dựng. Bạn có thể sử dụng nó để đặt bất cứ thứ gì.

Vì vậy, nếu, ví dụ, bạn đưa chỉ thị tiền xử lý của bạn với $ (featureset) và sau đó gọi MSBuild như, ví dụ

MSBuild solution.sln /p:FeatureSet=DEMO 

nó đượC#defined phù hợp mà không cần phải bằng tay clobber và respecify bất kỳ tiền xử lý khác chỉ thị bạn đang chạy.

Tôi đã xác minh điều này hoạt động trong VS2010. Không hoàn toàn chắc chắn về cách bạn định nghĩa FeatureSet cho một bản dựng được thực hiện bên trong Visual Studio mà không có MSBuild.

+1

Bạn có thể cho tôi một ví dụ đầy đủ về điều này không? Tôi không thể tìm ra cách để làm điều này một cách chính xác ... – ChrFin

+0

Một lần nữa, đây chỉ là VS2010. Tôi không biết về các phiên bản sau này. Các chỉ thị tiền xử lý là một danh sách các mục được phân cách bằng dấu chấm phẩy trong các thuộc tính dự án của bạn, theo cấu hình - C++ - bộ tiền xử lý. Thêm thủ công $ (biến) vào danh sách, sau đó khi bạn gọi MSBuild từ dòng lệnh, bạn có thể đặt/p: Variable = FOO và những thứ như #ifdef FOO sẽ trả lời nó. – Glazius

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