7

コードを通じて、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...可能ですか?

誰かアイデアを教えてください。ありがとうございました。

4

1 に答える 1