나는 MSDN's Hello World guide to developing Visual Studio extensions을 따라갔습니다 (이 기사에서는 Visual Studio 도구 모음 명령으로 만드는 방법을 설명합니다).EnvDTE를 사용하여 현재 솔루션에있는 모든 프로젝트를 나열하려면 어떻게합니까?
현재/활성 솔루션에 포함 된 모든 프로젝트를 나열하려고합니다.
명령 템플릿의 자동 생성 코드에 있습니다.
나는 EnvDTE
의 Solution
의 Projects
속성을 시도했지만 프로젝트가 없습니다.
또한 ActiveSolutionProjects
속성이 있지만 빈 배열도 표시됩니다.
어떻게 이루어 집니까?
P.S. : docs에서 사용할 버전을 이해하는 것이 혼란하기 때문에 DTE와 DTE2 인터페이스를 모두 시도했습니다. 나는 DTE2를위한 널 서비스를 얻는다, 그래서 나는 DTE에 가고있다.
내 솔루션 탐색기 보이는 같은 :
업데이트 : 버트 Huijben는 gitter/extendvs에서, 상기 VSSDK Extensibility Samples에서 발견, 다음과 같은 제안 -하지만 너무을 작동하지 않습니다 (생성자 및 콜백 함수 내에서 0 요소 반환 이온) : 나를 위해
private Hashtable GetLoadedControllableProjectsEnum()
{
Hashtable mapHierarchies = new Hashtable();
IVsSolution sol = (IVsSolution)this.ServiceProvider.GetService(typeof(SVsSolution));
Guid rguidEnumOnlyThisType = new Guid();
IEnumHierarchies ppenum = null;
ErrorHandler.ThrowOnFailure(sol.GetProjectEnum((uint)__VSENUMPROJFLAGS.EPF_LOADEDINSOLUTION, ref rguidEnumOnlyThisType, out ppenum));
IVsHierarchy[] rgelt = new IVsHierarchy[1];
uint pceltFetched = 0;
while (ppenum.Next(1, rgelt, out pceltFetched) == VSConstants.S_OK &&
pceltFetched == 1)
{
IVsSccProject2 sccProject2 = rgelt[0] as IVsSccProject2;
if (sccProject2 != null)
{
mapHierarchies[rgelt[0]] = true;
}
}
return mapHierarchies;
}
코드를 빨리 훑어 보면 작동해야합니다. 이게 뭐지? 서비스 제공자가 점점? GetService (typeof (SDTE))를 대신 수행하면 캐스트가 그대로 유지됩니다. –
Command1 생성자에서 솔루션이 아직로드되지 않은 것 같습니다. 코드를 MenuItemCallback으로 이동해보십시오. –
@JasonMalinowski :'System .__ ComObject'를 얻습니다. 이것은'Solution' 속성을 포함하고 있으며, 이것은'Projects' 속성을 포함하고 있습니다. 내가 제안한대로 SDTE를 시도했지만 SDTE는 빈 인터페이스이므로 많은 도움이되지 않습니다. – Veverke