VB.net程序在使用选项/ optimize +编译时崩溃,而Target框架是.Net Framework 4

时间:2012-02-08 03:40:07

标签: windows vb.net .net-4.0

我有一个VB.net Windows程序。它使用VS 2010 Ultimate(版本10.0.10219.1 SP1Rel)编译。在Windows窗体中,有一个TreeView控件。当使用选项/ optimize +编译程序时,程序将崩溃,而Target框架是.Net Framework 4。

我尝试了四组编译选项     一个。选中启用优化,目标框架:.Net Framework 4.
    湾取消选中启用优化,目标框架:.Net Framework 4.
    C。检查启用优化,目标框架:.Net Framework 3.5     d。取消选中启用优化,目标框架:.Net Framework 3.5。

实际结果:使用#a选项编译的exe崩溃。弹出未处理的异常对话框,下面是异常文本。使用选项#b,#c或#d编译的exe效果很好。

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Windows.Forms.TreeView.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

预期结果:单击树视图复选框时,选项#a的exe编译不应该崩溃。至少用选项#a和#b编译的exe的行为应该是相同的。

比较选项#a和#b的构建输出。唯一的区别是选项/ optimize +和/ optimize-。我猜Vbc.exe没有正确处理优化选项,这导致不同的运行时结果。一个是崩溃,另一个不是。

我怎样才能避免这种崩溃?它是编译工具Vbc.exe的缺陷吗?

在这里的文章(http://msdn.microsoft.com/en-us/magazine/dd419661.aspx)中,它指出在.Net 4中更改了异常框架。我尝试将<legacyCorruptedStateExceptionsPolicy enabled="true"/>添加到配置文件中。它不起作用。

UPDATE:删除编译输出。添加记录到miscrosoft的问题的链接

我将此问题记录到miscrosoft。 https://connect.microsoft.com/VisualStudio/feedback/details/723973。源代码可以在那里下载。

在项目中,只有一个名为MainUI的表单。它包含一个名为TreeViewDrwRes的树视图控件。 TreeViewUtil类用于扩展具有Indeterminate状态的TreeView控件的Checked按钮。通过使用WIN API调用更新按钮状态图像来修改该行为。

0 个答案:

没有答案