编译C#脚本时遇CS0009错误:zkemkeeper.dll元数据无效
搞定CS0009:zkemkeeper.dll元数据无效的问题
嘿,我一眼就看出问题出在哪了——你在Linux环境下(从路径/home/Lab/Bureau/Csharp/能看出来)直接引用了Windows专属的zkemkeeper.dll,这玩意儿是个Windows平台的COM组件库,根本不是.NET标准程序集,Linux下的Roslyn编译器自然读不懂它的元数据,直接给你抛CS0009错误太正常了。
给你几个针对性的解决方向:
- 先明确目标平台:zkemkeeper是中控智慧考勤设备的Windows驱动库,本身就不支持Linux。如果你本来就应该在Windows下开发,那别在Linux上折腾了,换Windows环境再处理。
- Windows环境下的正确引用姿势:就算在Windows下,也不能直接引用原DLL,得用.NET的类型库导入工具把它转成.NET能识别的互操作程序集:
- 打开Visual Studio的开发者命令提示符(或者装了.NET SDK的话直接用普通命令行)
- 运行这个命令:
tlbimp zkemkeeper.dll /out:Zkemkeeper.Interop.dll - 之后在你的C#项目里引用生成的
Zkemkeeper.Interop.dll,别再碰原DLL了
- 非要在Linux下开发?试试这些:如果必须在Linux对接设备,先去中控智慧官网看看有没有Linux版的SDK(一般是C语言的库),然后用C#的P/Invoke机制去调用这些Linux原生库,别再跟Windows的DLL死磕了。
另外那个编译警告估计也是因为这个无效引用导致的,等把DLL的问题解决了,警告应该会自动消失。
内容的提问来源于stack exchange,提问作者Borealis
相关产品推荐
相关产品推荐

