我在使用EntityFramework时遇到问题。虽然下面的代码和平在我的PC上工作正常,当它被传输到VPS(预先安装好所有东西)时,它会给我一个未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例,但是消息框应该抓住这个并没有出现。有什么建议吗?
提前谢谢。
var cc = new CopierContext();
try
{
MessageBox.Show(cc.Database.Connection.ConnectionString.ToString());
var matchingProviders2 = cc.Providers.Where(prov => prov.Login == "batman");
}
catch (Exception e)
{
MessageBox.Show(e.InnerException.Message);
}
更新
我终于找到了问题的核心。原因是:我在VPS上使用.NET 4,而应用程序是使用.NET 4.5开发的。安装后者可以解决所有问题。谢谢你的帮助。
答案 0 :(得分:1)
我不知道你是如何在你的VPS上运行它的,但是如果它没有在交互式用户帐户下启动,你的消息框就不会显示出来。
答案 1 :(得分:1)
来自Exception.InnerException Property
上的文档InnerException属性返回与传入的值相同的值 构造函数,或空引用
由于您正在捕获任何旧的异常catch (Exception e)
,因此抛出的异常很可能不是您期望的异常,并且没有InnerException。这意味着你的catch块可能会引发异常。
您可以采取多种措施。
最后,在记录或显示异常消息时,至少要确保在尝试使用它之前有一个内部异常。
MessageBox.Show( (e.InnerException != null ? e.InnerException : e).Message );
答案 2 :(得分:0)
不要使用MessageBox,因为它是一项服务;将它们记录到磁盘上,以便您可以回忆它们,或者自动将它们发送给您,以便您及时了解发生的问题。
您还需要将e.InnerException.StackTrace
添加到日志中。
答案 3 :(得分:0)
我敢打赌,你没有配置(或没有正确配置),cc.Database.Connection.ConnectionString
为空。调用.ToString()
会导致NullReferenceException。这就是你没有看到消息框的原因。正如其他人所说 - 使用MessageBox进行这种调试并不是一个好主意。在catch中你应该打印不是消息,但是e.ToString()它将显示应该指向问题所在的堆栈跟踪。