私の質問はこれと非常によく似ています: ComObject を ENVDTE.Project にキャストする方法は?
Visual Studio -> Solution Explorer で選択したプロジェクト項目を処理したい。プロジェクトがロードされている場合、コードは正常に動作しますが、アンロードされたプロジェクトには問題があります (それらは Unmodeled プロジェクト ( http://msdn.microsoft.com/en-us/library/hw7ek4f4%28v=vs.80%29.aspx ) と呼ばれます) .
読み込まれたプロジェクトの選択されたアイテムをキャストするuiItem.Object は EnvDTE.Projectですが、モデル化されていないプロジェクトをキャストするにはどうすればよいですか? 「UnmodeledProject」クラスはなく、キャストuiItem.Object is ProjectItem は機能しません。
これは私のコードです:
Window solutionExplorer = mApplicationObject.Windows.Item(Constants.vsWindowKindSolutionExplorer);
if(solutionExplorer != null)
{
UIHierarchy uiHierarchy = (UIHierarchy)solutionExplorer.Object;
if (uiHierarchy != null)
{
object[] selectedItems = (object[])uiHierarchy.SelectedItems;
foreach (UIHierarchyItem uiItem in selectedItems)
{
// Valid project
if (uiItem.Object is EnvDTE.Project)
{
EnvDTE.Project project = uiItem.Object as EnvDTE.Project;
if (project.FullName.Contains(".vdproj") || project.Kind == "{54435603-DBB4-11D2-8724-00A0C9A8B90C}")
{
}
}
else if (uiItem.Object is ProjectItem)
{
// This is never jumped...
}
else
{ ...