2012-09-10 2 views
2

sln 파일의 Project GUID 목록이 있습니다.Project GUID가 주어지면 프로젝트의 이름/경로를 어떻게 찾을 수 있습니까?

프로그래밍 방식으로 각 GUID에 해당하는 프로젝트를 찾아야합니다.

어떻게하면됩니까?

+1

프로그램이 Visual Studio에서 진행 중인가? 패키지로? 추가 기능으로? 너는 이미 어떤 물건을 가지고 있니? –

+0

sln 파일에서 프로젝트 종속성을 추출하려고합니다. sln 파일에서 동일한 종속성을 언급하기 때문에 동일한 프로젝트에 대해 sln 파일을 구문 분석하고 Project GUID 목록을 얻었습니다. 이제 모든 GUID의 프로젝트 이름/경로를 가져 와서 텍스트 파일에 쓰고 싶습니다. 해당 질문에 답변합니까? – aromore

답변

1

모든 비주얼 스튜디오 설정이이 같은 키를 레지스트리에 상주 :

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

버전 "11.0", "9.0"(VS 2008), "10.0"(2010 VS)처럼 될 수 있습니다 (VS 2012). 그러나 Visual Studio는 사용자 지정 '하이브'키로 시작할 수 있기 때문에 다른 것도 될 수 있습니다 (devenv.exe 명령 줄의/RootSuffix 매개 변수 참조).

그래서, 정상적인 작동을 위해, 프로젝트의 GUID가 여기에 있습니다 : Visual Studio에서

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

프로젝트 표준 프로젝트 (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 키로 정의하며 패키지가 GAC에 없으면 CodeBase 키가 있고 패키지가 GAC에있는 경우 Assembly 키만 있습니다.

+0

예. 알 겠어. 그러나 해당 프로젝트 이름을 프로그래밍 방식으로 가져와야합니다. 그럴 수있는 방법이 있습니까? – aromore

+0

@aromore - 일부 프로젝트 유형 (C#, VB.NET)은 프로젝트 구성을 XML로 저장하므로이 파일 (csproj, vbproj)을 열고 거기에서 정보를 얻을 수 있습니다. –

1

프로젝트 GUID를 그렇게처럼의 .sln 파일의 내부면을 따라 프로젝트 이름을 저장됩니다

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

은 이론적으로는 솔루션 파일을 preparse 및 프로젝트 - 투 - GUID 협회의지도를 만들 수있다. 일단 그 맵을 만들면 프로젝트의 GUID에 대한 참조를 실제 프로젝트 이름과 쉽게 교환 할 수 있어야합니다.

참고 : 프로젝트 파일에 표시되는 첫 번째 GUID는 실제 프로젝트가 아닌 프로젝트 유형입니다. 이를 통해 Visual Studio는 파일을 열고 사용할 때 사용할 템플릿을 관리 할 수 ​​있습니다. 이 경우에 원하는 것은 {AB5BA87B-77D5-4812-B02C-9B4FB87F4EF6}입니다.

0

나는이 질문에 답하는 것이 매우 늦을 수 있지만,이 질문에 대해 궁금해하는 다른 사람을 돕기를 희망합니다. 당신은 C#으로 솔루션 및 프로젝트 파일을 구문 분석에 사용할 수있는 여러 어셈블리가 있습니다, 그들은 다음과 같습니다

Microsoft.Build.Evaluation 

하고 나중에 어셈블리와

Microsoft.Build.Construction 

SolutionFile라는 클래스가있다. Documentation. 설명서 내에서 SolutionFile에는 GUID가 이미있는 경우 linq 쿼리를 수행 할 수있는 ProjectsByGuid 속성이 있습니다.이를 수행하는 코드는 다음과 같이 약간 보입니다.

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; 

이 정보가 도움이되기를 바랍니다.

관련 문제