ASP.NET Core 2项目中如何引入第三方库所依赖的其他第三方库?
解决ASP.NET Core 2.0部署时C++依赖库加载失败的问题
这种情况我之前处理过几次,核心问题大多是依赖的C++库没有被正确部署到服务器,或者运行时找不到它的位置,给你几个针对性的解决方法:
确保C++依赖库被自动复制到发布目录
本地运行时你把dll放在项目根目录能正常工作,但ASP.NET Core发布时默认不会自动复制非项目文件。你需要把这个C++库文件(比如xxx.dll)添加到项目中:- 在解决方案资源管理器里右键项目 -> 添加 -> 现有项,选中你的C++库dll;
- 选中这个dll,右键属性,把「复制到输出目录」设置为「始终复制」或者「如果较新则复制」;
- 也可以直接编辑
.csproj文件,手动添加配置:<ItemGroup> <None Include="your-cpp-library.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>
这样发布项目时,这个dll会被自动拷贝到服务器的发布文件夹里。
手动将发布目录加入系统PATH
有时候即使dll在发布目录,ASP.NET Core进程的运行环境可能没把当前工作目录加到PATH环境变量中,导致加载失败。你可以在程序启动时(比如Program.cs的Main方法里)添加这段代码:var currentDirectory = Directory.GetCurrentDirectory(); var existingPath = Environment.GetEnvironmentVariable("PATH"); if (!existingPath.Contains(currentDirectory)) { Environment.SetEnvironmentVariable("PATH", $"{existingPath};{currentDirectory}"); }这能确保运行时能找到当前目录下的依赖库。
安装对应版本的VC++ Redistributable
很多C库依赖微软的VC运行时组件,如果服务器上没装对应的版本,即使dll存在也会加载失败。你需要确认这个C库是用哪个版本的VS编译的(比如VS2017/2019),然后下载对应的VC Redistributable安装包到服务器上安装。这一步经常被忽略,但能解决大部分底层依赖问题。确认平台兼容性
你引用的是SomeLibrary64,说明是64位库:- 确保服务器操作系统是64位的;
- 在项目属性的「生成」选项卡中,把「平台目标」设置为
x64,避免32位进程尝试加载64位dll导致失败。
先从第一个方法开始试,大部分情况下复制dll到发布目录就能解决问题,如果不行再依次尝试后面的步骤。
内容的提问来源于stack exchange,提问作者JJJulien
相关产品推荐
相关产品推荐

