Microsoft.VisualStudio.Shell.Interop.ToolWindowPane类在Visual Studio 2013预览中编译时出错

时间:2013-09-02 20:19:30

标签: vsx visual-studio-2013

我正在为Visual Studio 2013构建一个Visual Studio包。这个相同的包适用于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类上,因为如果删除它,一切都会编译而没有任何错误。

有人知道为什么会出现这个问题吗?

提前感谢任何领导

我已经尝试过这里提到的解决方案Interop type cannot be embedded而没有运气:

2 个答案:

答案 0 :(得分:2)

问题是你引用的一个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

答案 1 :(得分: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; }
    }

}