仅在反射创建对象时才在发布模式下出现异常

时间:2016-06-20 16:26:58

标签: c# exception reflection release

我的应用程序仅在尝试以发布模式启动时失败。调试模式工作正常。我收到的错误是

  

PresentationFramework.dll中出现未处理的“System.Reflection.TargetInvocationException”类型异常

     

附加信息:调用目标引发了异常。

因为这只发布在发布中,所以调试起来有点困难。但是,如果我取消选中项目属性中的“优化代码”复选框,我可以看到此方法中抛出的异常:

 private static T MakeObject<T>(Type type) where T :class
    {
        //Default reflective behavior to create an instance with an empty constructor
        //
        //*note: .GetConstructor can return null.
        object obj = null;
        T tObj = default(T);

        ConstructorInfo ci = type.GetConstructor(TypeInfo.EmptyTypes);

        if (ci != null)
        {
            obj = ci.Invoke(new object[] { /* Empty */});

            tObj = obj as T;
        }

        if (tObj == null)
            throw new InvalidCastException("Fatal error occurred within NavigationService (GetConstructor). Type: " + type.ToString());

        return tObj;
    }

在这一行:

ConstructorInfo ci = type.GetConstructor(TypeInfo.EmptyTypes);

例外情况如下:

  

LWDCloudManager.exe中出现“System.NullReferenceException”类型的异常,但未在用户代码中处理

     

附加信息:未将对象引用设置为对象的实例。

有没有人对我如何解决这个问题,或者如何更深入地了解为什么只能在发布模式下发生这一问题有任何建议?

1 个答案:

答案 0 :(得分:2)

我发现了这个问题。实际上我是一个愚蠢的问题/疏忽。最近我的公司决定不使用内部方法中的异常,我们只使用Debug.Asserts,所以我去改变了所有这些。此问题之前的一行代码是调试断言,它围绕对字典上的TryGetValue调用的调用。因为我试图在发布模式下运行,所以没有执行debug.assert,因此没有从字典中检索到值,导致传递null。感谢帮助人员