我有一个来自sln文件的项目GUID列表。
我需要编程找到与每个GUID相对应的项目。
我该如何做?
我有一个来自sln文件的项目GUID列表。
我需要编程找到与每个GUID相对应的项目。
我该如何做?
项目 GUID 存储在 .sln 文件中,与项目名称一起存储,格式如下:
Project("{Project Type GUID}") = "MyProject",
"Source\MyProject\MyProject.vbproj",
"{AB5BA87B-77D5-4812-B02C-9B4FB87F4EF6}" EndProject
我可能回答这个问题有点晚了,但是为了帮助其他对此问题感到困惑的人。在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;
所有的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
键。