Spo*_*ook 3 .net c# asp.net native
假设我们有以下应用程序结构。
问题是,启动网络应用程序后我遇到了经典错误:
无法加载文件或程序集“MyAppDataProcessor.dll”或其依赖项之一。指定的模块无法找到。
应用程序正在 IIS Express 上运行,不幸的是,尝试找出系统搜索此 DLL 的位置失败,但我没有得到任何结果。
显而易见但肮脏的解决方案是将 DLL 放在某处并将其包含到系统路径中的某处。我正在寻找更好的解决方案:
其中一种解决方案可行吗?如何在 .NET MVC 项目中使用本机库?
更新:我的bin 文件夹中有DLL。但由于某种原因,程序集之一在运行期间被推送到以下文件夹:
C:\ Users \ spook \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ vs \ 331a8458 \ b4c79531 \ assembly \ dl3 \ 0ae2569e \ f3fde60f_7643d401
由于它是该文件夹中的唯一文件,因此系统无法访问其位于 bin 文件夹中的依赖项,因此会失败。所以问题是:为什么这个文件会出现在 bin 文件夹中Temporary ASP.NET Files而不是从 bin 文件夹中加载?
问题出在卷影复制机制上。它导致将具有本机依赖项的程序集复制到Temporary ASP.Net files文件夹 - 从而将其与 bin 文件夹中所需的二进制文件分开。
我在这里找到了解决方案:http://faithlife.codes/blog/2013/05/using-native-dlls-from-asp-net-apps/。简而言之,将以下内容添加到 web.config 以禁用卷影复制机制:
<configuration>
<system.web>
<hostingEnvironment shadowCopyBinAssemblies="false" />
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是将包含二进制文件的文件夹添加到系统路径,但这是我想避免的。