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

时间:2012-09-10 14:39:34

标签: c# .net solution envdte

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

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

我该怎么做?

3 个答案:

答案 0 :(得分: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”启动key(请参阅devenv.exe命令行的/ RootSuffix参数)。

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

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

Visual Studio中的项目可以是标准项目(C#,VB.NET等)或聚合项目(WPF“风味”超过C#或VB.NET)。

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

包裹说明可在此处找到:

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

本机程序包(C#,VB.NET,C ++,...)作为本机COM服务器实现,路径在InprocServer32项中定义。托管软件包将MSCOREE.DLL定义为InprocServer32密钥,并且还有一个CodeBase密钥,如果软件包位于GAC中,则软件包不在GAC中,只有Assembly密钥。

答案 1 :(得分:1)

项目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}

答案 2 :(得分:0)

我可能很晚才回答这个问题,但希望能帮助任何对这个问题感到奇怪的人。您希望使用几个程序集来解析C#中的解决方案和项目文件,它们是:

Microsoft.Build.Evaluation

Microsoft.Build.Construction

在后面的程序集中有一个名为SolutionFile的类。 Documentation。在文档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;

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