如何映射哪些Visual Studio解决方案使用了哪些项目?

5
我有一个软件项目,包含多个项目文件和多个解决方案文件。解决方案文件与项目文件有一对多的关系,给定的项目文件可能会出现在多个不同的解决方案文件中。
是否有好的 / 炫酷的方法来建立解决方案文件和项目文件之间的关系映射?可以通过 VS 或某种实用程序实现。
我想做的是说“嘿,在这个目录及其子目录中有许多解决方案文件和项目文件 - 请告诉我哪些解决方案使用哪些项目,并为我绘制出地图”。
我意识到通过打开每个解决方案文件并检查它来产生净效果,但我正在寻找一种自动化的、可重复的操作。
编辑:恐怕我也有追溯到 VS2003 的解决方案 / 项目组合,所以我需要将它们映射出来。
3个回答

3
除了Gordon Wilson的帖子之外,您可以尝试在C#中构建相同的内容,并使用QuickGraphGraphViz创建一个显示相同内容的图表。
QuickGraph可用于在内存中创建图结构并输出dot文件,Graphviz可以加载该文件并创建漂亮的图表。两个网站上的文档应该足够提供您所需的信息。
**编辑** 在这里可以看到我启动的一个小项目,它可以实现您需要的部分功能。您最多只需要几个小时就可以添加任何需要的内容。请随意使用它,但如果您这样做,请给我留言。

1

项目文件和解决方案文件都是文本文件。项目文件不知道它们所属的解决方案,因此我们需要在解决方案中查找它们的项目。

解决方案文件中的项目条目如下:

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

你可以看到,我们可以获取项目名称和项目文件的相对路径。

使用你喜欢的脚本语言,你可以像下面这样做。(以 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
一个简单的Python(Perl?)脚本,带有几个良好放置的正则表达式。
每个项目都有自己的GUID。找到映射只是找到项目的GUID并在解决方案文件中查找它们的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接