.net 尝试创建ssms加载项时出现问题
我正在尝试为SSMS 2008和/或2008 R2创建一个外接程序,但我马上遇到了一个问题 我可以让我的加载项工作,并在SSMS启动时让它只显示一个消息框 但是,在下载各种代码示例后,当尝试引用Microsoft.SqlServer.Management.UI.VSIntegration.ServiceCache时,我得到一个空引用异常:.net 尝试创建ssms加载项时出现问题,.net,add-in,ssms,.net,Add In,Ssms,我正在尝试为SSMS 2008和/或2008 R2创建一个外接程序,但我马上遇到了一个问题 我可以让我的加载项工作,并在SSMS启动时让它只显示一个消息框 但是,在下载各种代码示例后,当尝试引用Microsoft.SqlServer.Management.UI.VSIntegration.ServiceCache时,我得到一个空引用异常: Commands2 commands = (Commands2)ServiceCache.ExtensibilityModel.Commands; 我在使用
Commands2 commands = (Commands2)ServiceCache.ExtensibilityModel.Commands;
我在使用SSMS 2008或SSMS 2008 R2时遇到这个问题。我正在从事VisualStudio2010
这有点令人沮丧,因为我很想了解更多关于SSMS插件的信息,但似乎无法通过那里的几个示例
如有任何建议/提示,敬请垂询
谢谢Karl,我不知道您在这里的具体问题,但在回答另一个问题时,我看到了一堆关于编写SSMS插件的文章和链接,也许其中一篇对您有用: 可在此处找到一些信息:
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_addInInstance = (AddIn)addInInst;
_applicationObject = _addInInstance.DTE as DTE2;
_applicationObject有命令和其他有趣的东西
请注意,OnConnection的应用程序参数传入的对象不正确。这就是为什么您必须使用这一行来获取正确的对象:\u applicationObject=\u addInInstance.DTE as DTE2我也有同样的问题。我认为它喜欢框架 使用框架3.5 ServiceCache.ExtensibilityModel不为null 使用框架4.0 “ServiceCache.ExtensibilityModel”是 空的
好的,谢谢你这样做,但是如果我有一个Framework3.5中的项目,VS2010不会在我的断点上停止。 但是如果我将框架更改为4,VS2010将停止在断点上。但是CreateToolWindow2引发了一个异常,因为它不是同一个框架 我将代码简化为最低限度:
/// <summary>Implements the OnConnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being loaded.</summary>
/// <param term='application'>Root object of the host application.</param>
/// <param term='connectMode'>Describes how the Add-in is being loaded.</param>
/// <param term='addInInst'>Object representing this Add-in.</param>
/// <seealso class='IDTExtensibility2' />
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_addInInstance = (AddIn)addInInst;
_applicationObject = (DTE2)_addInInstance.DTE;
if (connectMode == ext_ConnectMode.ext_cm_Startup)//ext_ConnectMode.ext_cm_UISetup)
{
}
}
/// <summary>Implements the OnStartupComplete method of the IDTExtensibility2 interface. Receives notification that the host application has completed loading.</summary>
/// <param term='custom'>Array of parameters that are host application specific.</param>
/// <seealso class='IDTExtensibility2' />
public void OnStartupComplete(ref Array custom)
{
Windows2 win2 = this._applicationObject.Windows as Windows2;
if (win2 != null)
{
Assembly asm = Assembly.GetExecutingAssembly();
AddIn addinobj;
addinobj = this._applicationObject.AddIns.Item(1);
object controlObject = null;
Guid id = new Guid("4c410c93-d66b-495a-9de2-99d5bde4a3b9"); // this guid doesn't seem to matter?
//Window
Window windowTool = win2.CreateToolWindow2(addinobj,
asm.Location,
"MyAddinASupp.UserControl1", "Zone de test",
"{" + id.ToString() + "}",
ref controlObject);
windowTool.Visible = true;
}
}
///实现IDTExtensibility2接口的OnConnection方法。接收加载项正在加载的通知。
///主机应用程序的根对象。
///描述加载项的加载方式。
///表示此加载项的对象。
///
public void OnConnection(对象应用程序、ext_ConnectMode ConnectMode、对象外接程序、ref数组自定义)
{
_附加值=(附加值)附加值;
_applicationObject=(DTE2)\u addInInstance.DTE;
if(connectMode==ext\u connectMode.ext\u cm\u Startup)//ext\u connectMode.ext\u cm\u ui设置)
{
}
}
///实现IDTExtensibility2接口的OnStartupComplete方法。接收主机应用程序已完成加载的通知。
///特定于主机应用程序的参数数组。
///
启动完成时的公共无效(参考数组自定义)
{
Windows2 win2=此。\u applicationObject.Windows作为Windows2;
如果(win2!=null)
{
Assembly asm=Assembly.getExecutionGassembly();
AddIn addinobj;
addinobj=此应用程序对象AddIns.项(1);
objectcontrolobject=null;
Guid id=新Guid(“4c410c93-d66b-495a-9de2-99d5bde4a3b9”);//此Guid似乎不重要?
//窗口
windowTool=win2.CreateToolWindow2(addinobj,
位置,
“MyAddinASupp.UserControl1”,“测试区域”,
“{”+id.ToString()+“}”,
ref控制对象);
windowTool.Visible=true;
}
}
我已经为此挣扎了一段时间
我有一个在sql 2008中工作的插件-用VS2008编写
我将该项目升级到VS2010,并开始着手让sql 2008 r2插件工作——我无法让它为爱或金钱而工作
我尝试了很多不同的东西;
*删除并重新添加所有引用。
*改变目标框架。
不是香肠
什么都没用。。。。
直到我回到VS2008,我才做出了改变。(见Jonathan Kehayias博客:)
新版本万岁 好的,我找到了解决方案,问题在CLR2.0和CLR 4.0之间 资料来源: 在中调试以CLR 2.0为目标的加载项 VisualStudio2010 我在调试外接程序时遇到一些问题 如果这些是在CLR 2.0中加载的。我 将按F5,Excel将启动 我的外接程序将运行,但 断点没有被命中。所以我 想和大家分享一下发生的事情 如何在这样的环境中设置环境 F5体验的一种方式不是 完全破碎了 我通常的方式没有魔力 继续调试共享加载项- 要么加垫片,要么不加垫片。我定了一个 OnConnection方法中的断点 在Connect.cs文件中,打开项目的 属性,转到调试部分, 选择“启动外部程序” 选项,并将完整路径设置为 办公应用程序(例如“C:\Program 文件\Microsoft Office\Office12\EXCEL.EXE”)。接下来我 在中的项目节点上单击鼠标右键 解决方案资源管理器并选择“设置为” 启动项目”。当我按F5键时,我的 断点被击中 在VisualStudio2010中,断点 如果加载了我的外接程序,则不会命中 CLR2.0。这是怎么回事 调试器无法同时附加到CLR 4.0 和CLR2.0—它实际上需要 事先知道是否应该 正在使用CLR 2.0调试引擎或 CLR 4.0调试引擎。当你 按F5调试器尝试猜测哪个 CLR将在此过程中启动。 启发式是基于阅读 EXE的.config文件(如果需要) 通常指定运行时版本