第三方dll的静态私有对象导致我的.NET代码出错

时间:2017-07-20 09:34:34

标签: c# .net

我使用一个第三方dll并进行一些函数调用。 有时这个函数调用失败。所以我重新初始化对象并再次进行函数调用。但是,它仍然失败。如果我停止执行代码并重新启动它,我的函数调用再次正常工作。

我在这个第三方dll上使用了一个反编译器,并意识到在dll的类内部,有一个静态对象负责这个异常。当我重新启动程序时,静态对象必须重新初始化,然后我的代码才能工作。我可以使用代码强制执行此操作吗?基本上,我想确保在创建对象时,甚至dll中类内的静态对象都会重新初始化。我无法在生产中重新启动我的.NET程序。

1 个答案:

答案 0 :(得分:5)

使用可以使用Refection库来执行此操作:

    var prop = s.GetType().GetField("ThePrivateStaticObjectName",
          System.Reflection.BindingFlags.NonPublic
        | System.Reflection.BindingFlags.Instance);
    prop.SetValue(s, "new value");

以及为任何对象执行此操作的通用方法:

public static void SetPrivatePropertyValue<T>(T obj, string propertyName, object newValue)
{
    // add a check here that the object obj and propertyName string are not null
    foreach (FieldInfo fi in obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic))
    {
        if (fi.Name.ToLower().Contains(propertyName.ToLower()))
        {
            fi.SetValue(obj, newValue);
            break;
        }
    }
}

我希望能提供帮助:)