NET6控制台应用无法调用最简C++/CLR库的问题排查
解决.NET 6应用调用C++/CLR库时的FileNotFoundException问题
问题根源
.NET Core/.NET 6+ 与.NET Framework的依赖复制逻辑不同,默认情况下C++/CLR库的构建输出不会自动同步到.NET 6控制台应用的输出目录,这是导致运行时找不到程序集的核心原因。
具体解决步骤
1. 确认C++/CLR库编译配置
- 右键
TestClrLibrary.NetCore项目 → 属性 → 常规:- 验证目标框架为
net6.0,平台工具集为v143(VS2022对应版本) - 确认输出目录路径清晰(建议保留默认的
$(SolutionDir)$(Platform)\$(Configuration)\)
- 验证目标框架为
- 右键项目 → 属性 → C/C++ → 所有选项:
- 确保公共语言运行时支持设置为
/clr:netcore(必须选择netcore分支,而非默认的/clr)
- 确保公共语言运行时支持设置为
2. 手动配置依赖文件复制
.NET 6项目不会自动复制C++/CLR库文件,需手动配置:
图形化操作方式
- 右键
TestConsole.NetCore项目 → 添加 → 现有项,导航到C++/CLR项目的输出目录(如x64/Debug),选中TestClrLibrary.NetCore.dll和TestClrLibrary.NetCore.pdb - 选中添加后的两个文件,在右侧属性窗口设置:
- 复制到输出目录:选择
如果较新则复制 - 生成操作:设置为
内容
- 复制到输出目录:选择
项目文件手动配置方式
打开TestConsole.NetCore.csproj,添加以下XML节点(替换路径为你的C++/CLR项目实际输出路径):
<ItemGroup> <Content Include="..\TestClrLibrary.NetCore\x64\$(Configuration)\TestClrLibrary.NetCore.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Include="..\TestClrLibrary.NetCore\x64\$(Configuration)\TestClrLibrary.NetCore.pdb"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
3. 验证平台一致性
- 右键解决方案 → 属性 → 配置属性:
- 设置活动解决方案平台为
x64 - 确保两个项目的平台均为
x64(C++/CLR库不支持Any CPU,必须指定具体平台)
- 设置活动解决方案平台为
4. 核对程序集信息匹配
打开C++/CLR项目的AssemblyInfo.cpp(若不存在,右键项目 → 添加 → 新建项 → 选择“Assembly Information File”),确认程序集名称和版本与错误日志中的一致:
[assembly:AssemblyNameAttribute("TestClrLibrary.NetCore")]; [assembly:AssemblyVersionAttribute("1.0.8252.18682")];
若版本不匹配,修改后重新构建项目。
5. 清理并重新构建
- 点击菜单 → 生成 → 清理解决方案
- 重新生成所有项目,确保控制台应用的输出目录下同时存在
TestConsole.NetCore.exe和TestClrLibrary.NetCore.dll
内容的提问来源于stack exchange,提问作者Jacob Robbins
相关产品推荐
相关产品推荐

