我正在尝试在我的应用程序中找到一个错误;一个未处理的例外。似乎异常是在我触发的代码中独立的地方。我能找到的唯一解释是,我使用的程序集执行一些触发异常的代码。
组件是否有初始化和/或终止例程或类似的东西?
答案 0 :(得分:3)
您可以向appdomain添加处理程序:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
throw new NotImplementedException();
}
如果抛出任何异常,现在将调用此函数,从那里可以获得调用堆栈。如果您在调试器下运行它,请转到Debug菜单 - >公共语言运行时异常的异常和勾选“抛出”。这会在抛出异常时中断调试器。
答案 1 :(得分:2)
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei Unify.SQLBase.Data.SQLBaseCommand.Dispose
bei Unify.SQLBase.Data.SQLBaseCommand.Finalize
是的,这是一个非常讨厌的例外。它由SQLBaseCommand类的终结器引发。当终结器线程运行时会发生这种情况。这与您的代码完全异步,它可以在任何时间点发生。 CLR将立即终止您的计划。
这是您正在使用的数据库提供程序中的一个令人讨厌的错误,SQLBase的声音。很难相信他们会向提供商提供类似的错误。在寻找该提供程序的更新时,请仔细查看您在代码中创建的SqlCommand对象。如果这些都没有帮助那么你真的需要供应商的支持(统一)。
答案 2 :(得分:1)
不,.NET程序集没有初始化或终止例程
答案 3 :(得分:1)
C#不支持模块初始值设定项是正确的,尽管CLR v2中 支持。它需要修改IL来创建一个。请参阅http://blogs.msdn.com/b/junfeng/archive/2005/11/19/494914.aspx。
但是,我怀疑您的异常是由模块初始化程序中运行的代码引起的。看起来错误发生在Finalize上的SQLBaseCommand.Dispose中。所以,有几个问题:
答案 4 :(得分:0)
只要您放置了适当的safegaurds,就可以在类构造函数(或静态构造函数)中执行此操作。
您希望确保一旦注册了MQ,就不要再尝试这样做了。您还需要确保如果注册失败,您的构造函数不会抛出异常,而是以创建类但不可用的方式设置类状态。在构造函数中抛出异常将导致非常模糊的“类型初始化失败”错误消息。
更好的方法是创建一个管理与MQ关系的单例类。单例在类构造函数中实例化一次。它需要提供一个显式的“寄存器”方法,并且访问MQ的任何其他方法都是该单例的一部分,并且可以隐式地利用寄存器方法。这样做的好处是,每次调用MQ时,系统都会验证MQ是否已注册,如果没有注册,则在进行调用之前。