2009-05-08 32 views
29

Tôi có hai vấn đề tương tự:biến Macros/Môi trường trong sln và các tập tin .vcproj cho Visual Studio

a) Tôi có một giải pháp trong đó bao gồm một số dự án và tôi muốn để có thể dễ dàng chuyển đổi vị trí dự án bằng cách thiết lập một số biến môi trường/macro. Ví dụ, dự án này có thể được đặt trong \ SolutionDir \ Dir1 \ hoặc \ SolutionDir \ Dir2 \ Vì vậy, tôi muốn xác định rằng nó phải được đặt trong \ SolutionDir \ $ (Var) và chỉ cần đặt biến.

Có bản dựng nào trong Visual Studio để làm điều đó không?

Tôi biết hiện chỉ có hai giải pháp - chỉnh sửa tệp .sln manual/programmatically để tìm dự án này và đặt đường dẫn chính xác.

Tôi không thể sử dụng biến môi trường trong tệp .sln.

b) Tôi có một dự án bao gồm các tệp tài nguyên (.rc và .h). Tôi muốn có thể thiết lập vị trí của họ thông qua biến môi trường khác hoặc macro.

Something như \ ProjectDir \ $ (var2) \ resource.rc

tôi tìm thấy một số thông tin đầy hứa hẹn trên tờ bất động sản, nhưng Visual studio không mở rộng macro khi tôi đang sử dụng chúng trong thẻ File trong .vcproj .

Cảm ơn bạn về bất kỳ ý tưởng nào về cách giải quyết vấn đề này.

Kính trọng, Victor

+0

thú vị. Nhưng tôi không thể tìm ra lý do tại sao bạn muốn làm điều này. Có thể có một cách khác để giải quyết vấn đề bạn đang cố giải quyết. – Tim

+0

Tôi muốn thiết lập dự án để dễ dàng chuyển đổi giữa các phiên bản mang nhãn hiệu của sản phẩm cho các OEM khác nhau. –

Trả lời

17

Tôi nghĩ rằng tôi có cùng một mục tiêu hơn bạn: Tôi muốn sử dụng các biến môi trường để xác định vị trí một số dự án trong một file giải pháp (sln) và sử dụng một số biến môi trường để xác định vị trí một số tác phẩm trong các dự án của tôi.

Tôi tìm thấy cách để làm điều đó và nó hoạt động tốt cho tôi (với Visual Studio 2005): - chỉnh sửa tệp .sln bằng trình chỉnh sửa văn bản và sử dụng biến môi trường với cú pháp sau% MyEnvironmentVariable% - chỉnh sửa Các tệp .vcproj và thay thế đường dẫn đến các tệp mong muốn bằng một số biến, với cú pháp sau $ (MyEnvironmentVariable).

Hy vọng nó sẽ giúp ... Cyrille

+1

Đây chỉ là những gì tôi đang tìm kiếm, không biết điều đó.sln sử dụng cú pháp% VAR%, tôi đã sử dụng $ (VAR) hoạt động trong .scproj. Cám ơn! – watbywbarif

+0

Lưu ý rằng việc đưa các biến vào một tệp .sln có nghĩa là chúng không thể được sử dụng với MSBuild. Xem phần https://connect.microsoft.com/VisualStudio/feedback/details/690318/msbuild-doesnt-parse-environment-variables-in-sln-files – cowlinator

2

Cách tốt nhất để đạt được những gì bạn mô tả trong b) là sử dụng tờ bất động sản. Kiểm tra cũng rất này similar question.

tôi tìm thấy một số thông tin đầy hứa hẹn trên tờ bất động sản, nhưng Visual studio không mở rộng macro khi tôi đang sử dụng họ trong thẻ File trong .vcproj.

Tôi không chắc bạn đang sử dụng phiên bản VS nào. VS2008 cho phép bạn xác định ví dụ một thư mục bao gồm như thế này: "$ (OpenCVInclude) \ cxcore \ include". Tôi sử dụng nó mọi lúc. OpenCVInclude là một macro được định nghĩa trong một trang thuộc tính.

Đối với câu hỏi a), tôi nghĩ rằng không có cách "sạch" để làm những gì bạn muốn. Thay vào đó, bạn có thể quản lý cấu hình:

  • Bao gồm tất cả các dự án trong giải pháp.
  • Đặt tên cho dự án một cách khác nhau, ví dụ như dựa trên OEM.
  • Đối với mỗi dự án xác định cấu hình phát hành và gỡ lỗi trong giải pháp
  • Trong "Trình quản lý cấu hình>" Bạn có thể chọn hoặc bỏ chọn cột "Xây dựng" cho mỗi cấu hình. Kiểm tra "xây dựng" cho dự án có liên quan.
0

(a) Cyrille đưa ra giải pháp tốt cho những gì bạn yêu cầu. Một cách khác là giữ các cài đặt có thể thay đổi của bạn ở một nơi phổ biến. Lưu ý rằng điều này sẽ không hoạt động đối với các tệp không phải là msbuild như * .sln và * .vcproj (cho đến VS 2010).

file dự án: ... $ (ChangeableDir) \ foo.cs

Common.targets: ChangeThis ...

Tuy nhiên, tôi don' Tôi nghĩ đây là một cách tuyệt vời để làm mọi thứ. Nếu sự khác biệt giữa những gì bạn đang xây dựng là những phần lớn chức năng, bạn nên xem xét việc tạo một chi nhánh trong hệ thống kiểm soát nguồn của bạn. OTOH, nếu sự khác biệt là nhỏ - ví dụ như các chuỗi được mã hóa cứng - thì điều này dẫn đến câu hỏi thứ hai của bạn ...

(b) Loại quản lý tài nguyên mà bạn mô tả cơ bản là cùng một vấn đề mà mọi người phải đối mặt trong dự án của họ sang các ngôn ngữ khác nhau. May mắn thay, hỗ trợ trực tiếp được xây dựng vào Visual Studio từ năm 2005. Kiểm tra câu hỏi trước đó như: Localization in Visual Studio 2008

21

Chỉ cần sử dụng biến môi trường trong lĩnh vực có liên quan:

OutputDirectory="$(MyEnvVariableName)\Bin" 

Một mẹo nhỏ là bạn cần phải khởi động lại Visual Studio IDE mỗi khi bạn thay đổi biến.

Có một bài viết MSDN chính xác về vấn đề này: How to: Use Environment Variables in a Build

1

Tôi không chắc chắn nếu bạn đang xây dựng chỉ C++ dự án hoặc nếu bạn cũng đang xây dựng dự án C# \ VB, nhưng một trong những điều tuyệt vời về Visual Studio là tất cả các dự án đều thực sự là các dự án MSBuild. Nếu bạn chỉnh sửa một dự án trong một trình soạn thảo văn bản, bạn sẽ thấy rằng ở cuối dự án, nó sẽ nhập một tệp .targets. Nếu bạn theo dõi và tìm theo các nhập khẩu, bạn sẽ thấy rằng hầu như tất cả các dự án VS nhập khẩu Microsoft.Common.Targets. Microsoft.Common.Targets nhập khẩu Custom.Before.Microsoft.Common.Targets. Sử dụng tính năng nhập này, bạn có thể nhập tệp đích của riêng mình bằng hành động tùy chỉnh của riêng bạn. Ví dụ: tôi có một tệp đích có thuộc tính chung được xác định trên tất cả các dự án trong một giải pháp và sự kiện xây dựng bài đăng tùy chỉnh xử lý ở cuối mỗi tòa nhà dự án.

Sử dụng phương pháp tiện ích mở rộng này và bằng cách tạo cấu hình tùy chỉnh trong giải pháp ngoài bản phát hành chuẩn \ debug, bạn có thể tạo cấu hình xây dựng phức tạp như bạn cần.

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