.NET 6 CLR应用加载CSharpDll异常问题求助
解决.NET 6中C++/CLR无法加载C# DLL的问题
核心原因
在.NET 6中,CLR的依赖解析逻辑以宿主进程的配置文件为核心。你的ClrApp是原生C++程序,并非.NET应用,CLR宿主(ijwhost.dll)启动时会优先读取ClrApp.runtimeConfig.json和对应依赖文件,不会自动加载ClrDll自身的.deps.json,导致明明存在的CSharpDll无法被识别。
具体解决步骤
1. 改用项目引用替代手动#using
- 打开ClrDll项目,右键选择「添加」→「项目引用」,勾选CSharpDll项目。
- 删除代码中的
#using "CSharpDll.dll",可添加using namespace CSharpDll;简化代码编写。 - 构建时VS会自动处理依赖复制、生成正确的
ClrDll.deps.json,保证依赖关系被CLR正确识别。
2. 统一宿主配置文件
将ClrDll和CSharpDll的依赖配置合并到ClrApp的配置体系中:
- 打开
ClrApp.runtimeConfig.json,确保包含.NET 6运行时的正确版本,示例:{ "runtimeOptions": { "tfm": "net6.0", "framework": { "name": "Microsoft.NETCore.App", "version": "6.0.0" } } } - 将
ClrDll.deps.json中关于CSharpDll的依赖项复制到ClrApp.deps.json(若ClrApp无此文件,可手动创建)。
3. 自动复制构建文件
在ClrApp项目属性中设置构建后事件,自动同步所有依赖文件到输出目录:
xcopy "$(SolutionDir)ClrDll\$(OutDir)*.*" "$(OutDir)" /Y /E xcopy "$(SolutionDir)CSharpDll\$(OutDir)*.*" "$(OutDir)" /Y /E
无需手动复制文件,保证输出目录依赖完整。
额外检查项
- 确认ClrDll项目的「公共语言运行时支持」设置为
.NET 6(项目属性→常规→公共语言运行时支持)。 - 调试时确保VS的工作目录指向输出目录,避免加载路径错误。
内容的提问来源于stack exchange,提问作者ora
相关产品推荐
相关产品推荐

