给定项目 GUID,如何找到项目的名称/路径?

4

我有一个来自sln文件的项目GUID列表。

我需要编程找到与每个GUID相对应的项目。

我该如何做?


1
你的程序在 Visual Studio 中是以进程运行的吗?还是作为一个包?还是作为一个插件?你已经拥有哪些对象? - Simon Mourier
我正在尝试从一个sln文件中提取项目依赖关系。 我解析了这个sln文件,得到了一个项目GUID列表,因为这是在sln文件中提到依赖关系的方式。 现在,我想要获取所有GUID的项目名称/路径,并将它们写入文本文件。这回答了你的问题吗? - aromore
3个回答

3

项目 GUID 存储在 .sln 文件中,与项目名称一起存储,格式如下:

Project("{Project Type GUID}") = "MyProject",
"Source\MyProject\MyProject.vbproj",
"{AB5BA87B-77D5-4812-B02C-9B4FB87F4EF6}" EndProject

理论上,您可以预处理解决方案文件并构建一个项目到GUID关联的映射。一旦您建立了该映射,就可以很容易地用实际的项目名称替换任何对项目GUID的引用。
注意:在项目文件中看到的第一个GUID是项目类型的GUID,而不是实际的项目GUID。这有助于Visual Studio在打开和处理文件时管理要使用哪个模板。在这种情况下,您需要的是{AB5BA87B-77D5-4812-B02C-9B4FB87F4EF6}

1

我可能回答这个问题有点晚了,但是为了帮助其他对此问题感到困惑的人。在C#中,有几个程序集可以用于解析解决方案和项目文件,它们分别是:

Microsoft.Build.Evaluation

并且

Microsoft.Build.Construction

在后续的程序集中,有一个名为SolutionFile的类。文档。在文档中,SolutionFile包含了属性ProjectsByGuid,如果您已经拥有GUID,则可以对其进行Linq查询。实现此操作的代码将类似于以下内容:

var guid = "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"
var pathToSolutionFile = "C:\users\user\source\repos\solution\solution.sln"
var sln = SolutionFile.Parse(pathToSolutionFile);
var projectName = sln.ProjectsByGuid.Where(x => x.key==guid)
                     .FirstOrDefault().Value?.projectname;

我希望这可以帮助你或其他人。


1

所有的Visual Studio安装设置都存储在注册表中,类似于这样的一个键:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\[Version]

版本可以是“9.0”(VS 2008),“10.0”(VS 2010),“11.0”(VS 2012),但也可以是其他任何版本,因为Visual Studio可以使用自定义的“hive”键启动(请参见devenv.exe命令行的/RootSuffix参数)。

因此,对于正常操作,项目GUID位于此处:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\[Version]\Projects

Visual Studio中的项目可以是标准项目(C#,VB.NET等)或聚合项目(在C#或VB.NET上的WPF“flavor”)。

通常,项目具有包含Visual Studio Package(二进制文件)的GUID的“Package”键,该Package包含项目类型。

软件包描述可以在此处找到:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\[Version]\Packages

本地包(C#,VB.NET,C ++,...)作为本机COM服务器实现,并且路径在InprocServer32键中定义。托管包将MSOREE.DLL定义为InprocServer32键,如果包不在GAC中,则还有一个CodeBase键,如果包在GAC中,则仅有一个Assembly键。


是的,我明白。但是我需要以编程的方式获取相应的项目名称。 有没有办法做到这一点? - aromore
@aromore - 一些项目类型(如C#,VB.NET)将项目配置存储为XML,因此如果您需要的是这些信息,您可以打开这些文件(csproj,vbproj)并从中获取信息。 - Simon Mourier

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