Класс Microsoft.VisualStudio.Shell.Interop.ToolWindowPane выдает ошибку при компиляции в предварительном просмотре Visual Studio 2013

Я создаю пакет Visual Studio для Visual Studio 2013. Этот же пакет отлично работает для Vs 2012 и предыдущих версий. Это код класса:

public class MyClassWindowPane : ToolWindowPane
    {
        public MyClassPanel MyClassPanelControl;
        public List<IVsDataExplorerConnection> Connections { get; set; }
        public string SelectedConnectionName { get; set; }

        public MyClassWindowPane()
            : base(null)
        {
            MyClassPanelControl = new MyClassPanel();
        }

        public void InitializeMyClassPanel()
        {
            MyClassPanelControl.LoadConnections(Connections, SelectedConnectionName);
        }

        override public IWin32Window Window
        {
            get { return (IWin32Window)MyClassPanelControl; }
        }

    }

Я получаю следующие ошибки:

Не удается найти тип взаимодействия, который соответствует встроенному типу взаимодействия "Microsoft.VisualStudio.Shell.Interop.IVsWindowSearch". Вам не хватает ссылки на сборку?

Не удается найти тип взаимодействия, который соответствует встроенному типу взаимодействия "Microsoft.VisualStudio.Shell.Interop.IVsUIElementPane". Вам не хватает ссылки на сборку?

Я включаю следующие ссылки

using Microsoft.VisualStudio.Shell;
using System.Windows.Forms;
using System.ComponentModel.Design;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.Win32;

что должно быть более чем достаточно для компиляции..

Похоже, виновник находится в классе ToolWindowPane, так как, если я удаляю его, все компилируется без ошибок.

Кто-нибудь знает, почему возникает эта проблема?

Заранее спасибо за любое руководство

Я уже попробовал решение, упомянутое здесь. Тип взаимодействия не может быть внедрен без удачи:

2 ответа

Решение

Мне пришлось внести некоторые изменения, так что вот код, который наконец-то работал:

   using System.Windows.Forms;
   using System.Runtime.InteropServices;
   using Microsoft.VisualStudio.Shell;
   using Microsoft.VisualStudio.Data.Services;
   using System.Collections.Generic;
   using Microsoft.VisualStudio.Shell.Interop;
   using Microsoft.VisualStudio;

   namespace My.VisualStudio.Package
   {
    public class MyClassWindowPane : ToolWindowPane, IVsWindowFrameNotify2
    {
    public MyClassPanel MyClassPanelControl;
    public List<IVsDataExplorerConnection> Connections { get; set; }
    public string SelectedConnectionName { get; set; }

    public MyClassWindowPane()
        : base(null)
    {
        MyClassPanelControl = new MyClassPanel();
    }

    public void InitializeMyClassPanel()
    {
        MyClassPanelControl.LoadConnections(Connections, SelectedConnectionName);
    }

    override public IWin32Window Window
    {
        get { return (IWin32Window)MyClassPanelControl; }
    }

}

Проблема является результатом того, что одна из ваших dll, на которую ссылаются, ссылается на другую dll(например, как тип возврата из метода или свойства). Это недостаток CLR. Вы можете обойти это, ссылаясь на необходимую DLL (в данном случае, Microsoft.VisualStudio.Shell.Interop.10). Это решило это для меня.

Подробнее читайте здесь: http://blogs.msdn.com/b/vbteam/archive/2010/06/11/troubleshooting-errors-when-embedding-type-information-doug-rothaus.aspx

Другие вопросы по тегам