C# 第三方dll';的静态私有对象导致.NET代码出错

C# 第三方dll';的静态私有对象导致.NET代码出错,c#,.net,C#,.net,我使用一个第三方dll并进行一些函数调用。 有时此函数调用失败。因此,我重新初始化对象,并再次进行函数调用。然而,它仍然失败。如果我停止代码执行并重新启动它,我的函数调用就会再次正常工作。 我在这个第三方dll上使用了反编译器,并意识到在dll的类内部,有一个静态对象负责这个异常。当我重新启动程序时,静态对象必须重新初始化,然后我的代码才能工作。我是否可以使用代码强制执行此操作?基本上,我希望确保在创建对象时,即使是dll中类中的静态对象也能重新初始化。我无法在生产环境中重新启动.NET程序。

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

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

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

    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;
        }
    }
}
publicstaticvoid SetPrivatePropertyValue(T obj,stringpropertyname,objectnewvalue)
{
//在此添加一项检查,确保对象obj和propertyName字符串不为null
foreach(obj.GetType().GetFields中的FieldInfo fi(BindingFlags.Instance | BindingFlags.NonPublic))
{
if(fi.Name.ToLower().Contains(propertyName.ToLower()))
{
fi.设定值(obj,新值);
打破
}
}
}

我希望能有所帮助:)

如果没有更多的信息,很难说清楚,因为不清楚您到底是如何使用dll的。那又是什么?是本地的还是网络dll?是的,反射起作用了。。虽然我简单地提出了我的问题,但在内部有一些成员被定义为内部成员,我能够利用反思。。谢谢你的回复。。