无法在C#网站应用程序中加载库(.dll)

时间:2017-03-14 02:40:11

标签: c# asp.net .net dll web

我们有一个.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。

我们已经尝试过:

  1. 使用不同的加载功能,例如" UnsafeLoadFrom"。
  2. 重新编译x86和x64中的所有.dll库。
  3. 为Web.Config文件设置不同的配置,例如包括<trust level="Full" /><loadFromRemoteSources enabled="true" />
  4. 调试每个库的加载功能。其中一些可以成功加载,但还有一些会抛出加载异常
  5. 在ISS Express中设置&#34; True &#34;变量&#34; 启用32位应用程序&#34;。
  6. 特定错误状态&#34; System.Reflection.ReflectionTypeLoadException&#34;:

    Image

    有关如何解决此问题的任何想法?如果您需要更多信息,请与我们联系。

2 个答案:

答案 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没有任何异常加载。