我使用一个第三方dll并进行一些函数调用。
有时这个函数调用失败。所以我重新初始化对象并再次进行函数调用。但是,它仍然失败。如果我停止执行代码并重新启动它,我的函数调用再次正常工作。
我在这个第三方dll上使用了一个反编译器,并意识到在dll的类内部,有一个静态对象负责这个异常。当我重新启动程序时,静态对象必须重新初始化,然后我的代码才能工作。我可以使用代码强制执行此操作吗?基本上,我想确保在创建对象时,甚至dll中类内的静态对象都会重新初始化。我无法在生产中重新启动我的.NET程序。
答案 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;
}
}
}
我希望能提供帮助:)