【发布时间】:2014-09-19 17:44:10
【问题描述】:
我正在将 VS 插件转换为 VS 包。
我的 VSIX 包类中有这段代码(派生自 Microsoft.VisualStudio.Shell.Package)
protected override void Initialize() {
base.Initialize();
var dte = this.GetService<DTE>() as DTE2;
if(dte != null) {
var x = dte.MainWindow;
但是,在这种情况下调用 dte.MainWindow 会引发 NullReferenceException。
此时不能初始化某些东西。 那我应该什么时候打电话给dte.MainWindow?
在 VS 插件中,当 public void OnStartupComplete(ref Array custom) { 在 Connect 插件类型中调用 dte.MainWindow 时,它正在工作。
【问题讨论】:
-
那个 Debug.Assert() 让你睡着了。无论如何,它绝对不会告诉你一些你不会很快发现的事情。这是有害的,删除它。让你头脑清醒,你现在就来看看dte。
-
该问题与 Debug.Assert(...) Hans 无关。顺便说一句,它告诉我一些非常有用的东西:感谢这个断言,我知道 dte 不是 null,因此 NullRefEx 在调用 get_MainWindow() 期间来自 null。
-
通向神秘问题的道路是由假设铺成的。我们不知道的是 _DEBUG 条件是否真的被定义了。一切都说不是。
-
汉斯,问题不是来自 Debug.Assert(),是的,代码是在调试模式下编译的,我确实可以准确地说。
-
刚刚更新了问题,让我们专注于问题本身。
标签: visual-studio envdte vsix vspackage