コードを通じて、c + =プログラムに関する情報を取得しようとしています。私は EnvDTE である程度の成功を収めましたが、今は VCProject と VCCodeModel を使用する必要があり、キャストの問題に直面しています (これですべてです...)
ワーキング クラスでは"application"
、Connect から渡された DTE があります。
私は持っている:
EnvDTE.Project project = application.SelectedItems.Item(1).Project;
EnvDTE.Solution sol = (EnvDTE.Solution)application.Solution;
以下のように、Webで見つけた例として、ソリューションの最初のプロジェクトではなく、「プロジェクト」を使用したいと思いますが、ほとんどの場合、最初に機能するものを使用したいと思います。
VCProject については、(Microsoft の Web サイトや他のすべての Web サンプルから) 試しました。
VCProject vcProject = (VCProject)application.Solution.Projects.Item(1).Object;
MessageBox.Show(vcProject.ProjectDirectory);
あるいは単に
VCProject vcProject = (VCProject)project.Object;
VCCodeModel については、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);
}
}
どちらも例外を与えます:
"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"
どうすればこれを設定できますか? できれば「プロジェクト」を使用して...またはapplication.SelectedItems
...可能ですか?
誰かアイデアを教えてください。ありがとうございました。