VS2022 C#中'DllExport'类型或命名空间未找到问题求助
解决[DllExport]报CS0246错误的方案
首先明确:.NET原生类库中没有DllExportAttribute,System.Runtime.InteropServices里只有用于导入非托管代码的DllImport,导出托管函数为非托管DLL接口需要依赖第三方工具或NuGet包,这就是你报错的核心原因。
以下是针对不同.NET版本的解决办法:
针对.NET Framework项目
- 安装
RGiesecke.DllExportNuGet包,这是实现DllExport最常用的第三方库。安装完成后,项目会自动添加必要的程序集引用和构建配置。 - 确认代码中添加了对应的命名空间引用:
using RGiesecke.DllExport; - 重新编译项目,错误应该会消失。
针对.NET Core/.NET 5+项目
.NET 5及以上版本推荐使用原生支持的[UnmanagedCallersOnly]属性替代第三方DllExport:
- 替换原有的
[DllExport]属性为:[UnmanagedCallersOnly(CallingConvention = CallingConvention.StdCall)] - 确保项目启用NativeAOT发布(右键项目 -> 属性 -> 发布 -> 目标框架选择对应版本,发布方式选NativeAOT),因为托管代码导出为非托管接口需要AOT编译支持。
- 该属性属于
System.Runtime.InteropServices命名空间,你的项目已经引用了这个命名空间,无需额外添加。
额外检查点
- 如果项目是从GitHub克隆的,先查看项目的
README或packages.config/Project.csproj文件,确认原项目依赖的DllExport相关包,严格按照原配置安装对应版本,避免版本不兼容问题。 - 清理项目的bin/obj目录后重新构建,排除缓存导致的引用异常。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

