我有一个sln文件中的项目GUID列表。
我需要以编程方式找到与每个GUID对应的项目。
我该怎么做?
答案 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;
我希望这可以帮助你或其他任何人。