【问题标题】:Third party dll can't find its dependencies in ASP.NET MVC project第三方 dll 在 ASP.NET MVC 项目中找不到它的依赖项
【发布时间】:2011-10-14 22:00:20
【问题描述】:

我在我的项目中使用第三方库。称它为MainLibNET.dll。我在我的项目的References 中添加了这个库。此 dll 与其他 dll 有依赖关系。我无法在References 中添加其他 dll,因为它们是本机的。我把这个其他库放在\bin 但是当我开始我的项目时我得到了错误:

Could not load file or assembly 'MainLibNET.dll' or one of its dependencies

MainLibNET.dll 找不到它的依赖项,因为当站点启动时,服务器返回 MainLibNET.dll 不是从 \bin 而是从这里:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\e9b9d054\ddfaf4f8\assembly\dl3\8e683e03\00c3703b_919bcb01\MainLibNET.dll

除 MainLibNET.dll 外,此文件夹中没有其他文件。如果我在此文件夹中复制其他 dll,它可以正常工作。

我可以对我的项目或其他任何东西做些什么来使我的项目在不手动复制的情况下工作?

【问题讨论】:

    标签: c# asp.net-mvc visual-studio dll


    【解决方案1】:

    托管程序集得到 ASP.NET 复制的影子。此过程不包括非托管库,这解释了为什么它们无法解析。一种可能性是将这些本机库添加到 c:\windows\System32\Inetsrv 文件夹中。另一种可能性是将它们放入作为PATH 环境变量一部分的文件夹中。

    【讨论】:

    【解决方案2】:

    我遵循this blog 中提到的选项 2a (1c),效果很好。

    1. 在 Visual Studio 中,右键单击项目并为每个本机 DLL 添加现有项

    2. 右键单击每个添加的 DLL 并选择属性;设置构建操作 = 内容并复制到输出目录 = 始终复制。这将导致VS将文件复制到bin目录。

    3. 将以下代码添加到 Global.asax,以便 ASP.NET 知道在哪里查找本机 DLL。

    .

    protected void Application_Start(object sender, EventArgs e)
    {
        String _path = String.Concat(System.Environment.GetEnvironmentVariable("PATH"), ";", System.AppDomain.CurrentDomain.RelativeSearchPath);
        System.Environment.SetEnvironmentVariable("PATH", _path, EnvironmentVariableTarget.Process);
    }
    

    【讨论】:

      【解决方案3】:

      ASP.NET 使用shadow copying,其中:

      允许在不卸载应用程序域的情况下更新应用程序域中使用的程序集。

      您可以将以下项目添加到您的 Web.config 文件以禁用此沙盒功能:

      <configuration>
      ...
        <system.web>
         ...
            <hostingEnvironment shadowCopyBinAssemblies="false" />
        </system.web>
      
      

      这应该允许您像加载 .NET 控制台应用程序一样加载本机 DLL。

      【讨论】:

        猜你喜欢
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        • 2017-05-17
        • 2018-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多