1

我正在为 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 with no lucky:

4

2 回答 2

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-in​​formation-doug-rothaus.aspx

于 2015-07-07T18:56:31.060 回答
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; }
    }

}
于 2014-02-21T04:23:06.797 回答