5

複数のプロジェクト ファイルと複数のソリューション ファイルで構成されるソフトウェア プロジェクトがあります。ソリューション ファイルはプロジェクト ファイルと 1 対多の関係にあり、特定のプロジェクト ファイルが複数の異なるソリューション ファイルに表示される場合があります。

ソリューション ファイルとプロジェクト ファイルの間の関係のマップを作成するための適切で気の利いた方法はありますか? VSまたは何らかのユーティリティを介して。

私がやりたいのは、「ねえ、このディレクトリとそのサブディレクトリには、多数のソリューション ファイルとプロジェクト ファイルがあります。どのソリューションがどのプロジェクトを使用しているかを教えてください」

すべてのソリューション ファイルを開いて検査することで最終的な効果が得られることはわかっていますが、自動化された反復可能なアクションを探しています。

編集: VS2003 にさかのぼるソリューション/プロジェクトの組み合わせもあると思いますので、それらもマッピングする必要があります。

4

3 に答える 3

3

Gordon Wilson の投稿に加えて、C# で同じものを作成し、 QuickGraphGraphVizを使用して同じものを示す図を作成することができます。

QuickGraph を使用して、メモリ内にグラフ構造を作成し、ドット ファイルを出力できます。これを Graphviz が読み込んで見栄えの良い図を作成できます。両方のサイトのドキュメントで十分な情報が得られるはずです。

** 編集 **私が始めた小さなサイド プロジェクトについては、こちらを参照してください。必要なものは、せいぜい数時間で追加できます。自由に使用してください。使用する場合は、コメントを残してください。

于 2009-01-23T01:29:12.837 に答える
1

プロジェクト ファイルとソリューション ファイルはどちらもテキスト ファイルです。プロジェクト ファイルはそのソリューションを認識していないため、プロジェクトのソリューションを調べる必要があります。

ソリューション ファイルのプロジェクト エントリは次のようになります。

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

ご覧のとおり、プロジェクト名とプロジェクト ファイルへの相対パスを取得できます。

お気に入りのスクリプト言語を使用すると、次のようなことができます。(ルビでの例)

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
于 2009-01-22T23:00:22.607 に答える
0

いくつかの適切な場所の正規表現を使用した単純な python (perl?) スクリプト。
すべてのプロジェクトには独自の GUID があります。マッピングを見つけるには、プロジェクトの GUID を見つけて、ソリューション ファイルでそれらを検索するだけです。

于 2009-01-22T22:58:04.110 に答える