首页 > 解决方案 > 从 ASP .net 调用第 3 方 .dll。找不到DLL。

问题描述

我正在使用 ASP .NET 和 Web API 和 IIS 构建 REST 服务器 (?)。一切都很顺利,直到我添加了对 3rdparty .dll 的引用。然后我得到运行时错误:无法加载文件或程序集“xx.DLL”或其依赖项之一。

我已将所有相关目录(我认为)添加到 Visual Studio 中的“参考路径”页面。这些路径是否在运行时使用?或者我必须编辑项目中的其他文件/设置?

此外,当我搜索有问题的 .dll 时,我找到了一个副本: C:\Users\Andy\AppData\Local\Temp\Temporary ASP.NET Files\root\24c08d5b\dcd0af52\assembly\dl3\58d7d48b\005afae1_ece9d201\xx.DLL

为什么 ASP .NET 会复制我的 .dll?我可以阻止它这样做吗?为什么这个目录里只有一个.dll?

标签: c#asp.net.net

解决方案


参考路径

VS 中的引用路径仅供 Visual Studio 本地使用。将其视为一种覆盖引用的提示路径的方法,但只是在本地。AKA - 一旦您想在 VS 之外运行代码(例如部署到服务器),它就无济于事。

如果您尝试在项目中引用 3rd 方 dll 以供使用,您将希望通过添加引用对话框直接在应用程序中引用它们。

GAC vs Not Gac'd 和复制本地属性

如果在计算机上将第 3 方 dll 安装到 GAC 中,那么只要所有计算机都安装了它,您就应该没问题。只需添加引用并将复制本地属性设置为 false(在 VS 中单击您的引用并查看它的属性选项卡)。

如果它们没有安装到 GAC 中,则需要复制本地 true。

您在临时 asp.net 文件位置看到的结果取决于您的引用,您的引用的复制本地属性等于 true。

Copy Local = true 表示:我需要此 DLL 以使我的应用程序正常运行,并且我知道此 DLL 不在 GAC 中,因此请在编译时复制它。

Copy Local = false 表示:我需要此 DLL,但它位于我的服务器/部署位置的 GAC 中,因此我不需要复制它。.Net 运行时会为我找到它(在 GAC 中)。

奖金

如果这些 3rd 方 DLL 有一个 nuget 包,请使用它。

如果他们不考虑:

处理不在 GAC 中的第 3 方 dll 的引用/使用的一种普遍接受的方法是在项目解决方案的根目录中创建一个 lib 文件夹,将所需的 dll 添加到该文件夹​​中,然后引用这些文件并在本地复制参考为 true 以便复制构建中的文件以确保它们始终与您的编译输出一起使用。

然后 lib 文件夹与您的代码一起进行源代码控制,以确保所需的 dll 版本与代码一致。


推荐阅读