2012-12-12 2 views
6

Ich versuche, einige Informationen über c + = Programme, durch Code zu bekommen. Ich hatte ein wenig Erfolg mit EnvDTE, jetzt muss ich VCProject und VCCodeModel verwenden und ich bin in Casting-Probleme (hoffe, dass das alles ...)Konnte nicht DTE, Projekt oder Lösung zu VCProject und VCCodeModel

In der Arbeiterklasse habe ich eine DTE "application" von der Connect übergeben .

ich habe:

EnvDTE.Project project = application.SelectedItems.Item(1).Project; 
EnvDTE.Solution sol = (EnvDTE.Solution)application.Solution; 

Ich möchte verwenden, „projizieren“, nicht das erste Projekt in der Lösung als die Beispiele, die ich im Internet gefunden habe - wie unten - aber vor allem, würde ich gerne habe etwas, das zuerst funktioniert.

Für VCProject, habe ich versucht (off Website von Microsoft und alle anderen Web-Beispiele):

VCProject vcProject = (VCProject)application.Solution.Projects.Item(1).Object; 
MessageBox.Show(vcProject.ProjectDirectory); 

oder ... nur

VCProject vcProject = (VCProject)project.Object; 

Für VCCodeModel, ich übersetzt C# http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vccodemodel.vccodeinclude.aspx :

public void GetAllIncludes() 
{ 
    VCCodeModel vcCM = (VCCodeModel)application.Solution.Item(1).CodeModel; 
    foreach (VCCodeInclude vcInclude in vcCM.Includes) 
    { 
    MessageBox.Show(vcInclude.DisplayName); 
    }  
} 

Beide geben Ausnahme:

"unable to cast com object of type 'system.__comobject' to interface type Microsoft.VisualStudio.VCCodeModel" 
"unable to cast com object of type 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProjectShim' to type Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProject" 

Wie kann ich das einrichten? Vorzugsweise mit dem "Projekt" ... oder application.SelectedItems ... Ist es möglich?

Kann mir bitte jemand eine Idee geben? Vielen Dank.

+0

Ich weiß, ich bin ziemlich spät hier, aber vielleicht möchten Sie sich [mein Beitrag] (http://stackoverflow.com/questions/29951353/can-one-cast-an-envdte-project- into-a-vcproject? noredirect = 1 # comment48023756_29951353) – Kraven

Antwort

1

Dieses Problem tritt auf, wenn Sie versuchen, CodeModel in einer anderen VCCodeModel-Version zu konvertieren. Es gibt eine VCCodeModel.dll für jede VS-Version.

+1

Ich habe dieses Problem in einem Visual-Studio-Paket, das im Visual Studio 2010, 2012, 2013 und 2015 angestrebt wird. Die einzige praktische Lösung scheint zu sein, die Typen als Objekt und zu definieren Verlass auf die späte Bindung. –

Verwandte Themen