我用 C# 开发了一个小型 WinForm 应用程序。我已经发布了这个应用程序多年,很多用户在许多不同的 Windows 系统上使用它,Windows XP、Vista、7、8、32 位和 64 位。
但是几天前,一位用户在 Windows 7 64 位计算机上启动应用程序时报告了崩溃。因为我无法重现我这边的错误,所以我给他发了可以输出日志信息的调试版本。
现在我找到了失败的线路
this.Controls.Add(this.myUserControl);
这是 Visual Studio 从窗体设计器生成的一行。“this.myUserControl”是用户控件的一个实例。此用户控件内置于本项目中,不包含任何外部组件。只是用一些标准的 UI 控件构建的。.NET 错误信息是
“System.NullReferenceException:对象引用未设置为对象的实例。”
我已经添加了代码来测试 this.myUserControl 在添加到控件之前是否为空,它绝对不是空的。
我尝试了很多方法,比如使用 corflags.exe 强制它以 32 位模式运行或将构建目标框架更改为 3.5(在它是 2.0 之前)
没有什么变化。它总是在那条线上崩溃。
在发布之前我已经在 Windows 7 64bit 上测试过这个应用程序,并且这个应用程序有很多用户在 Windows 7 64bit 上使用它。所以我认为我不应该更改任何代码。但我对如何解决这个问题没有任何方向。
我应该告诉用户重新安装 Windows 还是修复 .Net Framework?有人在 Windows 7 64bit 上遇到此错误吗?
英语不是我的母语,所以对我的英语感到抱歉。
与用户控件相关的代码,所有这些代码都是从窗体设计器生成的:
private MyUserControl myUserControl;
this.myUserControl = new ProjectNameSpace.MyUserControl();
this.myUserControl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.myUserControl.Location = new System.Drawing.Point(12, 80);
this.myUserControl.Name = "myUserControl";
this.myUserControl.Size = new System.Drawing.Size(775, 412);
this.myUserControl.TabIndex = 2;
this.myUserControl.Resize += new System.EventHandler(this.myUserControl_Resize);
this.Controls.Add(this.myUserControl);