2013-09-02 3 views
1

Я создаю пакет Visual Studio для Visual Studio 2013. Этот же пакет отлично работает для Vs 2012 и предыдущих. Это код класса:Microsoft.VisualStudio.Shell.Interop.ToolWindowPane Класс дает ошибку при компиляции в Visual Studio 2013 Предварительный просмотр

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; } 
     } 

    } 

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

Не можете найти тип Interop, соответствующий встроенный тип Interop «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, так как если я удалю это все компилируется без любая ошибка.

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

Спасибо заранее для любого ведущего

Я уже пробовал решения, упомянутые здесь Interop type cannot be embedded не повезло:

+1

Если вы перенастроили проект из Visual Studio 2012 может понадобиться обновить некоторые ссылки на визуальные сборки взаимодействия Studio's ... – Matze

ответ

1

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

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; } 
    } 

} 
0

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

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