我们有一个.Net应用程序成功地#34;加载" 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。
我们已经尝试过:
<trust level="Full" />
或<loadFromRemoteSources enabled="true" />
。特定错误状态&#34; System.Reflection.ReflectionTypeLoadException&#34;:
有关如何解决此问题的任何想法?如果您需要更多信息,请与我们联系。
答案 0 :(得分:0)
我猜你在IIS下运行它,而IIS通常以与你不同的用户身份运行(通常是IUSR
),并且通常具有有限的权限。将独立程序转换为ASP.NET程序会以微妙的方式改变很多事情。我会检查以确保您没有遇到文件权限问题,因为IIS是受限用户。
另外,正如其他人所指出的那样,您应该提供异常详细信息(至少是其类型名称和消息),以便人们不必猜测它。
答案 1 :(得分:0)
根据this question的答案和我们在网站应用程序中执行的几个加载实验。我们观察到了与我们用于编译DLL的框架版本相关的模式以及 ReflectionTypeLoadException 。一些DLL使用框架3.5 进行编译,此版本不允许使用 .Net CLR2 在ISS中加载库。然后,我们必须使用更高版本的框架( .Net v4.0 )重建所有DLL及其依赖项。最后,我们使用.NET CLR4在ISS express中重新加载了更新的DLL。 DLL没有任何异常加载。