2011-07-28 50 views
2

我在我的项目中使用第三方库。称它为MainLibNET.dll。我在我的项目的References中添加了这个库。这个DLL与其他DLL有依赖关系。这个其他的dll我不能在References中添加,因为它们是原生的。我把这个其他图书馆\bin但是当我开始我的项目,我得到错误:第三方DLL在ASP.NET MVC项目中找不到它的依赖关系

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,它工作正常。

如何使用我的项目或其他任何方法来使我的项目无需手动复制?

回答

1

受管组件获取由ASP.NET复制的影子。这个过程不包括非托管库,这解释了为什么他们不能解决。一种可能性是将这些本地库添加到c:\windows\System32\Inetsrv文件夹中。另一种可能性是将它们放入PATH环境变量的一部分的文件夹中。

+0

谢谢!只有当我在C:\ Windows中添加我的库时,它才适用于我。以下是有关ASP.Net中C++程序集的更多信息http://blogs.msdn.com/b/jorman/archive/2007/08/31/loading-c-assemblies-in-asp-net.aspx –

0

我遵循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); 
}