2013-11-25 16 views
7

Tôi có một giải pháp chứa rất nhiều dự án C#, làm thế nào tôi có thể thay đổi cấu hình của tất cả các dự án một cách nhanh chóng, như tôi muốn thay đổi thư mục đầu ra từ thùng rác sang MyBin. Tôi biết tài sản C + + có thể làm điều tương tự nhưng C# không có trang thuộc tính.Làm thế nào để cấu hình tất cả các dự án C# trong một giải pháp

+4

Bạn có thể tìm kiếm và thay thế thông qua tất cả các tệp csproj. – theoutlander

+0

Đây có phải là giải pháp tiêu chuẩn cho vấn đề của tôi không? –

+1

Có ... Bởi vì thực sự không có giao diện người dùng cho việc này. Truyền thống .NET chỉ sử dụng các thư mục 'bin' và' obj'. –

Trả lời

1

Bạn có thể sử dụng tệp dự án 'một phần' chung để lưu trữ các nội dung phổ biến.

Di chuyển tất cả nội dung mà bạn muốn được thay đổi đồng thời thành tệp .proj độc lập, ví dụ: common.proj:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <OutputPath>Debug</OutputPath> 
    <Platform>AnyCPU</Platform> 
    </PropertyGroup> 
</Project> 

Thần sử dụng msbuild import khai để 'bao gồm' phần chung vào mỗi dự án trong giải pháp của bạn:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="common.proj" /> 
</Project> 

MSBuild nhập khẩu làm việc nhiều hơn hoặc ít hơn trong cùng một cách thức như C++ bao gồm: trước dự án được xây dựng tất cả các chỉ thị nhập khẩu được thay thế bằng nội dung của tệp được nhập. Bây giờ bạn có thể thay đổi các thuộc tính chung của mình chỉ trong một tệp - common.proj

Có một điều quan trọng cần lưu ý: VS cache chứa tệp dự án, vì vậy bạn phải tải lại tất cả các dự án sau khi áp dụng thay đổi cho tệp common.proj (vì vậy tôi đề xuất xây dựng từ dòng lệnh khi bạn chủ động thay đổi commom.proj)

Chúng tôi sử dụng phương pháp này để quản lý cài đặt phân tích mã (vì chúng được cho là giống nhau trên tất cả các dự án trong giải pháp).

+0

Cảm ơn rất nhiều vì sự giúp đỡ của bạn! –

2

Bạn phải xác định mới Build Configuration, có thể được sao chép từ phát hành hoặc từ gỡ lỗi hoặc xây dựng tất cả bằng tay. Sau khi bạn có thể tùy chỉnh cho mọi dự án, tùy chọn đó là tùy chọn liên quan đến bản dựng tùy chỉnh mà bạn vừa tạo và bạn đã hoàn tất. Điều này được thực hiện, tự nhiên, chỉ một lần. Sau đó, bất cứ khi nào bạn chọn tùy chỉnh xây dựng tất cả các thuộc tính được chọn cho từng dự án trong giải pháp sẽ được thiết lập với các thuộc tính bạn muốn.

enter image description here

+0

Nếu tôi đọc OP đúng, anh ta không muốn thực hiện nó trên cơ sở từng dự án , anh ấy muốn định cấu hình tất cả các dự án cùng một lúc. –

+0

@ Moo-Juice: vâng. BUt đây là một cách để làm điều đó. Bạn * một lần * làm cho mọi dự án trong giải pháp, và sau khi mọi thứ hoạt động chỉ cần chuyển đổi giữa các tùy chọn cấu hình khác nhau. – Tigran

+1

Tigran - vâng, đó là cách, nhưng chỉ khi bạn muốn tự giới hạn mình với VS UI. Nếu bạn không quan tâm và nếu bạn hiểu VS Projects và MSBuild có liên quan như thế nào với nhau, bạn không thực sự phải có và toàn bộ các tùy chọn mới được mở cho bạn. Giao diện người dùng VS mang lại cho bạn theo mặc định không phải lúc nào cũng tốt nhất và đôi khi phải thực hiện một số tùy chỉnh. Nó thực sự khá dễ dàng. – quetzalcoatl

1
  • Rightclick trên TẤT CẢ các dự án trong dung dịch, one-by-one.
  • Nhấp vào 'dỡ bỏ đối với từng
  • sau đó nhấp vào "chỉnh sửa XXX.csproj" một lần nữa trên tất cả trong số họ

Bây giờ bạn sẽ có nhiều XMLs mở như tập tin văn bản.

Bây giờ sử dụng Tìm & Replace (control-shift-H nếu bạn sử dụng các phím tắt mặc định), và thiết lập:

  • Find what: OutputPath>bin\Debug</OutputPath
  • thay bằng: MyBin\Debug
  • Look in: All open documents

và nhấn Replace All.

Sau đó, thực hiện tương tự với bin\ReleaseMyBin\Release.

Sau đó lưu tất cả XML, sau đó nhấp chuột phải vào mọi dự án và chọn "tải lại".

Bạn có thể làm tương tự trong bất kỳ trình soạn thảo văn bản nào hoặc bất kỳ dòng lệnh nào tìm thấy & thay thế tiện ích như sed. Nếu bạn ave bất kỳ, sử dụng chúng để thay thế - nó sẽ giúp bạn tiết kiệm từ rightlicking/dỡ tất cả các dự án. Bạn cũng có thể khai thác thực tế là CSPROJs chỉ là các tệp MSBuild, vì vậy bạn có thể tạo một kịch bản 'cấu hình' MSBuild sẽ được bao gồm mỗi dự án C# của bạn, và sẽ xác định các biến bổ sung như 'đường dẫn đầu ra chung', v.v. Nhưng trong khi điều này chắc chắn hoạt động (tôi đã làm nó một vài lần), nó có lẽ sẽ vít lên một số PropertySheets trong giao diện người dùng VS theo cách tự nhiên nhất, ví dụ, nếu bạn sử dụng điều này để ghi đè/thiết lập OutputPaths, sau đó giao diện người dùng VS hiển thị đường dẫn đầu ra trống hoặc bị hỏng và cố gắng sử dụng giao diện người dùng VS để sửa/thay đổi chúng lần lượt sẽ ghi đè cài đặt thông minh của bạn đọc chúng từ tệp cấu hình chung. Rõ ràng, phải không.

EDIT: tại đây nó nhanh chóng được giải thích: Partial .csproj Files, tuy nhiên, vui lòng đọc nhận xét của tôi bên dưới, chỉ trong trường hợp.

+0

Cảm ơn bạn rất nhiều vì đã trả lời. Tôi biết làm thế nào để thay đổi cấu hình bằng cách chỉnh sửa các tập tin dự án xml, và tôi cũng biết làm thế nào để thay đổi chúng trong VS GUI. Những gì tôi muốn đạt được là sửa đổi một giá trị đơn giản và sau đó tất cả các dự án sử dụng giá trị sẽ được thay đổi, ví dụ, ban đầu tôi sử dụng .NET framework 4.0 cho tất cả các dự án và bây giờ tôi muốn sử dụng 4.5 –

+0

Cách duy nhất để làm điều đó giống như tôi đã nói - bằng cách sử dụng chỉ thị "nhập" của MSBuild trong tệp .csproj. Bạn sẽ tạo một tệp "half-project" bổ sung sẽ thiết lập một số thuộc tính phổ biến và sau đó mỗi dự án của bạn sẽ "bao gồm" tệp đặc biệt đó. Xem chủ đề này: http://stackoverflow.com/questions/157149/partial-csproj-files Quan sát và đặc biệt quan tâm đến những gì họ nói về các tệp "có nguồn gốc" nhất. Nếu projectA bao gồm projectB bao gồm projectC, và nếu projectD cũng bao gồm projectC, thì bạn nên ** chỉ ** có projectA và projectD đi kèm với Solution trong VS IDE. – quetzalcoatl

+0

Lưu ý rằng dự án thêmB và projectC KHÔNG cần kết thúc bằng .csproj. Bạn có thể "bao gồm" bất kỳ tệp nào có định dạng XML/MSBuild chính xác. Điều này có nghĩa là bạn có thể đặt tên cho chúng một cách khác nhau và bao gồm chúng trong Giải pháp, nhưng KHÔNG phải là các dự án, mà đúng hơn là các tệp XML đơn giản. Điều này sẽ giúp chỉnh sửa chúng dễ dàng hơn một chút. Tuy nhiên, bạn vẫn phải rất cẩn thận: IDE VS thường sẽ không nhận thấy bất kỳ thay đổi nào bạn thực hiện đối với các tệp phụ đó trừ khi bạn tải lại giải pháp/projectA/projectD. Fortunatelly, nó chỉ là vấn đề IDE. Tùy chọn "Xây dựng" sẽ luôn đọc mọi thứ đúng cách. – quetzalcoatl

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