gpt4 book ai didi

c# - 第三方 dll 的静态私有(private)对象导致我的 .NET 代码出现错误

转载 作者:行者123 更新时间:2023-12-02 17:24:54 25 4
gpt4 key购买 nike

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

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

最佳答案

您可以使用Reflection库来做到这一点:

    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;
}
}
}

关于c# - 第三方 dll 的静态私有(private)对象导致我的 .NET 代码出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45210848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com