从ASP .net调用3rd party .dll。找不到Dll。

时间:2018-11-09 14:53:31

标签: c# asp.net .net

我正在使用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?

1 个答案:

答案 0 :(得分:1)

参考路径

VS中的参考路径仅由Visual Studio本地使用。可以将其视为覆盖引用的提示路径的一种方法,但只能覆盖本地。又名-如果您想在VS之外运行代码(例如,部署到服务器),将无济于事。

如果您尝试引用项目中使用的第三方dll,则需要通过添加引用对话框直接在应用程序中引用它们。

GAC与未授权并复制本地媒体资源

如果将第3方dll安装在GAC上的计算机上,则只要所有计算机都安装了它,那么您就可以了。只需添加引用,并将copy local属性设置为false(在VS中单击您的引用,然后查看其属性选项卡)。

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

使用asp.net临时文件位置看到的结果取决于引用的副本本地属性等于true的引用。

Copy Local = true意味着:我需要此DLL才能使我的应用程序正常运行,并且我知道此DLL不在GAC中,因此请在编译时将其复制。

Copy Local = false意味着:我需要此DLL,但它在我的服务器/部署位置的GAC中,因此不需要复制它。 .Net运行时将在GAC中为我找到它。

奖金

如果这些第三方DLL具有nuget程序包,请使用该程序包。

如果他们不考虑:

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

然后对lib文件夹以及您的代码进行源代码控制,以确保所需的dll版本随代码一起提供。