我为Visual Studio 2008编写了一个简单的插件,它可以打开可停靠的窗口面板。
您可以通过点击此处下载源代码和二进制安装程序。
这个插件的特性意味着它理想情况下会一直停靠在您编辑源代码的地方。但有时,在某些安装中,它不会停靠。你运行VS,你把我的窗格停靠,你关闭VS,你重新启动VS,然后该窗格又漂浮起来了。在某些机器上,我必须每次重新停靠它。
但在其他安装中,它永远停靠在我放置它的地方。我最初认为这可能是Vista和XP之间的差异,但现在我收到了关于XP上也出现这种问题的报告。
从我所读的内容(以及有时它会停靠)中,我得出的印象是,VS应该为我保存停靠状态。但它没有做到。而同一VS安装中的其他插件却没有这个问题。因此,我必须做些改进来解决这个问题。
我怀疑我的代码中唯一相关的部分是这个:
(MSDN文档建议在OnConnection中创建窗口,但如果我这样做,窗口大多数情况下都不会出现。)
您可以通过点击此处下载源代码和二进制安装程序。
这个插件的特性意味着它理想情况下会一直停靠在您编辑源代码的地方。但有时,在某些安装中,它不会停靠。你运行VS,你把我的窗格停靠,你关闭VS,你重新启动VS,然后该窗格又漂浮起来了。在某些机器上,我必须每次重新停靠它。
但在其他安装中,它永远停靠在我放置它的地方。我最初认为这可能是Vista和XP之间的差异,但现在我收到了关于XP上也出现这种问题的报告。
从我所读的内容(以及有时它会停靠)中,我得出的印象是,VS应该为我保存停靠状态。但它没有做到。而同一VS安装中的其他插件却没有这个问题。因此,我必须做些改进来解决这个问题。
我怀疑我的代码中唯一相关的部分是这个:
public class Connect : IDTExtensibility2
{
private static DTE2 _applicationObject;
private AddIn _addInInstance;
private static CodeModelEvents _codeModelEvents;
public static DTE2 VisualStudioApplication
{
get { return _applicationObject; }
}
public static CodeModelEvents CodeModelEvents
{
get { return _codeModelEvents; }
}
public static event EventHandler SourceChanged = delegate { };
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
}
public void OnStartupComplete(ref Array custom)
{
try
{
Events2 events = (Events2)_applicationObject.Events;
_codeModelEvents = events.get_CodeModelEvents(null);
object objTemp = null;
Windows2 toolWins = (Windows2)_applicationObject.Windows;
Window toolWin = toolWins.CreateToolWindow2(
_addInInstance, GetType().Assembly.Location, "Ora.OraPane", "Ora",
"{DC8A399C-D9B3-40f9-90E2-EAA16F0FBF94}", ref objTemp);
toolWin.Visible = true;
}
catch (Exception ex)
{
MessageBox.Show("Exception: " + ex.Message);
}
}
public void OnBeginShutdown(ref Array custom) { }
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) { }
public void OnAddInsUpdate(ref Array custom) { }
}
(MSDN文档建议在OnConnection中创建窗口,但如果我这样做,窗口大多数情况下都不会出现。)