【发布时间】:2017-03-14 02:40:11
【问题描述】:
我们有一个 .Net 应用程序,它成功地从 Windows 操作系统中的特定文件夹“加载”了 .dll 库。到目前为止,我们一直在使用的 .Net 框架是 4.6。 应用程序加载的所有 .dll 库都是在 x86 中编译的。以下代码是我们如何加载库并获取它们的类型的摘录:
1. try{
2. AssemblyFileDescriptor assemblyFile = new AssemblyFileDescriptor(assemblyPath);
3. var assm = Assembly.LoadFrom(assemblyPath);
4. var types = assm.GetExportedTypes();
5. ...
6. }catch (Exception e) {
7. ...}
特定文件夹中的库,比如说
C:\Program Files (x86)\FOLDER
,正在加载到变量assm,没有任何异常。当我们将 .Net “独立”应用程序迁移到具有 Web.config 文件的网站应用程序时,就会出现问题。在网站应用程序中,加载函数在获取类型时失败。然后第 4 行抛出异常。我们一直在使用 ISS Express。
我们已经尝试过了:
- 使用不同的加载函数,例如“UnsafeLoadFrom”。
- 在 x86 和 x64 中重新编译所有 .dll 库。
- 为 Web.Config 文件设置不同的配置,例如包括
<trust level="Full" />或<loadFromRemoteSources enabled="true" />。 - 调试各个库的加载功能。其中一些可以成功加载,但还有一些抛出 Loading Exception。
- 在 ISS Express 中设置“True”变量“启用 32 位应用程序”。
具体错误状态为“System.Reflection.ReflectionTypeLoadException”:
知道如何解决这个问题吗?如果您需要更多信息,请告诉我。
【问题讨论】:
-
您有异常详情吗?可能有助于解决问题。