4

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

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

我怎样才能做到这一点?

4

3 回答 3

3

项目 GUID 与 .sln 文件中的项目名称一起存储,如下所示:

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

从理论上讲,您可以预先解析解决方案文件并构建 Project-To-GUID 关联的映射。建立该映射后,您应该能够很容易地将对项目 GUID 的任何引用替换为实际项目名称。

注意:您在项目文件中看到的第一个 GUID 是项目类型,而不是实际项目。这有助于 Visual Studio 在打开和使用文件时管理要使用的模板。在这种情况下,您想要的是{AB5BA87B-77D5-4812-B02C-9B4FB87F4EF6}

于 2012-09-10T15:36:23.100 回答
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 参数)。

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

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

Visual Studio 中的项目可以是标准项目(C#、VB.NET 等)或聚合项目(WPF“风格”优于 C# 或 VB.NET)。

通常,项目有一个“包”键,其中包含包含项目类型的 Visual Studio 包(二进制文件)的 guid。

包描述可以在这里找到:

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

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

于 2012-09-10T15:10:09.617 回答
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;

我希望这对您或其他任何人都有帮助。

于 2017-06-09T08:00:38.793 回答