我正在为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而没有运气:
答案 0 :(得分:2)
问题是你引用的一个dll引用另一个dll的结果(例如,作为方法或属性的返回类型。)这是CLR的一个缺陷。您可以通过引用所需的dll(在本例中为Microsoft.VisualStudio.Shell.Interop。 10 )来解决它。这解决了我。
答案 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; }
}
}