.NET Core 2添加zkemkeeper.dll遇程序集加载异常求助
解决.NET Core 2中调用zkemkeeper.dll的FileNotFoundException问题
我来帮你捋捋这个问题的常见解决思路——毕竟在.NET Core里调用传统COM组件确实容易踩各种坑:
1. 确保正确生成并引用互操作程序集
你遇到的Interop.zkemkeeper是.NET与COM组件交互的中间程序集,.NET Core不会像Framework那样自动生成它,得手动操作:
- 打开Visual Studio的开发者命令提示符,用
tlbimp.exe工具生成互操作集:tlbimp zkemkeeper.dll /out:Interop.zkemkeeper.dll - 把生成的
Interop.zkemkeeper.dll直接添加到项目中,右键它→属性,设置复制到输出目录为「始终复制」或「如果较新则复制」。
2. 匹配组件的平台架构
zkemkeeper.dll这类门禁设备SDK大多是32位的,而.NET Core默认的Any CPU模式会导致加载失败:
- 右键项目→属性→生成→平台目标,选择x86,然后重新编译项目。
- 注意:如果部署到服务器,服务器也得是32位环境,或者确认该SDK有64位版本(大部分情况没有)。
3. 手动注册COM组件(Windows环境)
Windows系统下,COM组件必须注册才能被.NET识别:
- 打开管理员命令提示符,执行注册命令:
regsvr32 "你存放zkemkeeper.dll的完整路径" - 看到注册成功的提示后,再尝试调用组件方法。
4. 配置.NET Core 2的COM互支持
.NET Core 2对COM互操作的支持不如Framework完善,试试在项目的.csproj文件中添加以下配置:
<PropertyGroup> <EnableComHosting>true</EnableComHosting> </PropertyGroup>
保存后重新构建项目,让框架更好地识别互操作程序集。
5. 检查输出目录的文件完整性
编译完成后,去项目的bin/Debug/netcoreapp2.x目录下确认:
Interop.zkemkeeper.dll是否存在zkemkeeper.dll本体是否也被复制到了该目录(部分COM组件需要依赖本体文件才能正常加载)
如果以上步骤都试过还是有问题,可以补充下你在.NET Core 1中复现的具体表现,方便进一步排查。
内容的提问来源于stack exchange,提问作者Pieter van Zyl
相关产品推荐
相关产品推荐

