我有一个.net Core3.0应用程序试图通过反射调用.Net Framework4.8。我们的目标是使用AppSettings.config ( ConfigurationManager )读取加密的.Net,这在.Net核心中是不可能的。未加密的是,但加密(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:无法加载文件或程序集'System.Configuration.ConfigurationManager、Version=4.0.2.0、Culture=neutral、系统找不到指定的文件。
因此,我在.Net Framework4.8中编写了一个代理程序,并使用相同的代码访问通过反射读取加密配置的代码,它运行良好。
然后,我编写了.net Core3.0代码,通过反射访问该代理,结果失败了。代理.Net框架4.8没有任何引用。是巴里伯恩。然而,核心仍然需要ConfigurationManager,即使代理不需要。Config程序只有一个引用-- System.Configuration。
核心3.0 =>加密App.config =>失败
核心3.0 => ConfigProgram 4.8 => App.Config =>失败
ConfigProgram 4.8 => App.config => Works
代理4.8 => ConfigProgram 4.8 => App.Config => Works
核心3.0 =>代理4.8 => ConfigProgram 4.8 => App.Config =>失败
我想参考的System.Configuration并不是4.8%的反射调用所必需的,但是即使通过.Net Core3.0中的barebone垫脚石也是必需的。有人能帮帮我吗?
发布于 2019-09-09 01:25:24
当您通过在.NET核心上的反射加载为.NET框架构建的程序集时,它不会加载.NET框架的任何部分--只是您的程序集(“用户cod")。有些部分可能起作用,也可能不起作用。在您的示例中,它失败了,因为为.NET框架编译的代码的请求类/程序集不是.NET核心的一部分。
这就是为什么开始启动.NET框架应用程序的情况--从而启动.NET框架运行时--才对您有用的原因。
https://stackoverflow.com/questions/57846835
复制相似问题