【发布时间】:2018-09-03 22:52:40
【问题描述】:
假设我们有以下应用程序结构。
- MyApp.Web,这是一个适用于 .NET 4.7.2 的 .NET MVC 应用;
- MyApp.Web 使用 MyApp.DataProviderWrapper 程序集;
- MyApp.DataProviderWrapper 引用程序集 MyApp.DataProvider(作为二进制文件包含在 MyApp.DataProviderWrapper 的项目文件中)
- MyApp.DataProvider 对 MyAppDataProcessor.dll 执行 P/Invoke,这是一个本地库,并且有自己的本地依赖项,显然我也可以访问。
问题是,在启动网络应用程序后,我遇到了经典错误:
无法加载文件或程序集“MyAppDataProcessor.dll”或其依赖项之一。找不到指定的模块。
应用程序正在 IIS Express 上运行,不幸的是,试图找出系统搜索此 DLL 的位置失败,我在那里没有得到任何结果。
显而易见但肮脏的解决方案是将 DLL 放在某个地方并将其包含在系统 PATH 的某个地方。我正在寻找更好的解决方案:
- 以这样的方式配置项目,使其知道在哪里寻找本地库,或者
- 将库放在项目中的某个文件夹中,以便在加载 MyApp.DataProvider 程序集时找到它们。
其中一种解决方案可能吗?如何在 .NET MVC 项目中使用本机库?
更新:我确实在 bin 文件夹中有 DLL。但由于某种原因,其中一个程序集在运行期间被推送到以下文件夹:
C:\Users\spook\AppData\Local\Temp\Temporary ASP.NET Files\vs\331a8458\b4c79531\assembly\dl3\0ae2569e\f3fde60f_7643d401
由于它是该文件夹中唯一的文件,因此系统无法访问其依赖项,这些依赖项位于 bin 文件夹中,因此失败。那么问题来了:为什么这个文件落在Temporary ASP.NET Files而不是从bin文件夹中加载?
【问题讨论】:
-
想评论否决票?
-
bin文件夹中有原生dll吗?
-
如果您搜索 SO,您会发现至少有一个重复项说明 DLL 应位于
bin文件夹中。是吗?