c# - .Net Core 3.0 通过反射调用 .Net Framework 4.8 程序
问题描述
我有一个 .net Core 3.0 应用程序试图通过反射调用 .Net Framework 4.8。我们的目标是使用 ConfigurationManager 读取加密的 AppSettings.config (xml),这在 .Net Core 中是不可能的。未加密是,但加密(CipherData),否。
我访问静态类和方法的反射代码如下所示:
Assembly assembly = Assembly.LoadFrom(exeFullName);
MethodInfo method = assembly.GetType(nameSpacenClass).GetMethod(methodName);
if (method != null)
{
object rtnVal = method.Invoke(null, new object[] { jsonParms });
return rtnVal;
}
else
return null;
Method.Invoke 出错并显示此异常消息: FileNotFoundException: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'。该系统找不到指定的文件。
所以我在 .Net Framework 4.8 中编写了一个代理程序,并使用相同的代码访问通过反射读取加密配置的代码,它工作正常。
然后,我编写了 .net Core 3.0 以通过反射访问该代理,但它失败了。代理 .Net Framework 4.8 没有任何引用。它是准系统。然而,即使代理不需要,核心仍然需要 ConfigurationManager。Config 程序只有一个引用 - System.Configuration。
Core 3.0 => 加密的 App.config => 失败
核心 3.0 => ConfigProgram 4.8 => App.Config => 失败
ConfigProgram 4.8 => App.config =>工作
代理 4.8 => ConfigProgram 4.8 => App.Config => Works
核心 3.0 => 代理 4.8 => ConfigProgram 4.8 => App.Config => 失败
我猜想引用的 System.Configuration 对 4.8 的反射调用不是必需的,但即使通过准系统的垫脚石,.Net Core 3.0 也需要。有人可以帮我吗?
解决方案
当您通过 .NET Core 上的反射加载为 .NET Framework 构建的程序集时,它不会加载 .NET Framework 的任何部分 - 只是您的程序集(“用户代码”)。有些部分可能会也可能不会。在您的情况下,它会失败,因为为 .NET Framework 编译的代码的请求类/程序集不是 .NET Core 的一部分。
这就是为什么只有启动 .NET Framework 应用程序的情况(即启动 .NET Framework 运行时)才适合您的原因。
推荐阅读
- javascript - 在解析中返回另一个 aysnc 函数
- r - 使用 R 从多个 excel 文件中提取特定单元格
- react-native - React Native 错误:带有有效负载 {"name":"GameScreen"} 的操作 'NAVIGATE' 未被任何导航器处理
- javascript - 关闭 iframe 模式时如何停止 youtube 视频
- python - 为什么我无法在 selenium webdriver python 上单击此按钮?
- amazon-s3 - 如何在 Kafka Connect S3 中解析记录头?
- java - Spring-Boot:带参数的注入?
- python - 在客户数据中查找首次购买的月份
- c# - RegistryKey 类中的 ValidateKeyView 有什么意义?
- java - 使用 Proguard 混淆 Spring Boot fat Jar