You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:25:45