2009-01-22 36 views
5

Tôi có một dự án phần mềm bao gồm nhiều tệp Dự án và nhiều tệp Giải pháp. Các tệp giải pháp có quan hệ một-nhiều với các tệp dự án và tệp dự án đã cho có thể xuất hiện trong nhiều tệp giải pháp khác nhau.Làm cách nào để tôi có thể vạch ra giải pháp Visual Studio nào sử dụng Dự án nào?

Có cách nào hay hay để đưa ra bản đồ về mối quan hệ giữa tệp Giải pháp và tệp Dự án không? Hoặc là thông qua VS hoặc một tiện ích của một số loại.

Những gì tôi muốn làm là nói "hey, trong thư mục này và thư mục con của nó có một số file Solution và các tập tin dự án - xin vui lòng cho tôi biết đó là giải pháp sử dụng mà dự án và bản đồ nó ra cho tôi"

Tôi nhận ra hiệu ứng ròng có thể được tạo ra bằng cách mở từng tệp Solution và kiểm tra nó nhưng tôi đang tìm một hành động tự động, lặp lại.

CHỈNH SỬA: Tôi e là tôi cũng có giải pháp/dự án combo có niên đại từ VS2003, vì vậy tôi cũng cần phải vẽ bản đồ đó.

Trả lời

1

Cả tệp dự án và tệp giải pháp đều là tệp văn bản. Các tệp dự án không biết về giải pháp của chúng, vì vậy chúng ta sẽ phải xem xét các giải pháp cho các dự án của chúng.

Một entry dự án trong file giải pháp trông như thế này:

Project("{9AC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ProjectName", "ProjectDirectory\ProjectFileName.vcproj","{9A95F635-B74F-4640-BBCF-E324D0972CA9}" 
EndProject 

Vì vậy, bạn có thể thấy, chúng ta có thể lấy tên dự án và đường dẫn tương đối so với hồ sơ dự án.

Sử dụng ngôn ngữ kịch bản yêu thích của bạn, bạn có thể làm điều gì đó như sau. (Ví dụ trong ruby)

require 'find' 

def project_name(string) 
    string =~ /= "(.+?)"/ 
    $1 
end 

#the script doesn't use this method but you may want it 
def project_path(string) 
    string =~ /, "(.+?)"/ 
    $1 
end 

def find_projects(path) 
    puts "#{path} contains the following projects:" 
    open(path).read.gsub(/Project\(.+?EndProject/m) do |match| 
    puts project_name(match) 
    end 
    puts "" 
end 

#change File.dirname(__FILE__)) to the name of the directory you want to search. 
Find.find(File.dirname(__FILE__)) do |path| 
    if FileTest.directory?(path) 
    if File.basename(path) =~ /^\../ # Directory name starts with . 
     Find.prune  # Don't look any further into this directory. 
    else 
     next 
    end 
    elsif path =~ /\.sln$/ 
    find_projects(path) 
    end 
end 
0

Tập lệnh python đơn giản (perl?) Với một vài cụm từ thông dụng.
Mọi dự án đều có GUID riêng. việc tìm kiếm ánh xạ chỉ là vấn đề tìm kiếm GUID của các dự án và tìm kiếm chúng trong các tệp giải pháp.

3

Ngoài bài Gordon Wilson, bạn có thể thử xây dựng được điều tương tự trong C#, và sử dụng QuickGraphGraphViz để tạo ra một biểu đồ cho thấy điều tương tự.

QuickGraph có thể được sử dụng để tạo cấu trúc biểu đồ trong bộ nhớ và xuất ra tệp dấu chấm, mà Graphviz có thể tải và tạo biểu đồ tìm kiếm đẹp mắt. Tài liệu trên cả hai trang web sẽ cung cấp cho bạn đủ thông tin để tắt.

** chỉnh sửa ** Xem here cho một dự án nhỏ bên tôi đã bắt đầu thực hiện một số điều bạn muốn. Bạn có thể có thể thêm bất cứ điều gì bạn cần trong một vài giờ nhiều nhất. Cảm thấy tự do để lấy nó và sử dụng nó tuy nhiên bạn muốn, chỉ để lại cho tôi một bình luận nếu bạn làm vui lòng.

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