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

已指定csc引用仍提示System.Runtime程序集缺失,原因是什么?

为何编译时指定了System.Runtime引用,运行时仍提示找不到该程序集?

我正在尝试深入理解csc编译器的工作原理,编写了如下基础C#程序:

using System;

class Program
{
    public static void Main()
    {
        Console.WriteLine("test");
    }
}

随后我从dotnet build生成的csc命令中提取关键参数,执行了如下编译命令:

dotnet exec "C:\Program Files\dotnet\sdk\7.0.203\Roslyn\bincore\csc.dll" /reference:"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Runtime.dll" /reference:"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.5\ref\net7.0\System.Console.dll" .\test.cs

编译过程成功并生成了可执行文件,但运行时却出现以下错误:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.


问题原因

你编译时引用的是参考程序集(Reference Assemblies),这类文件仅包含类型、方法的元数据信息,用于编译阶段的语法和类型检查,完全没有实际的执行代码。Microsoft.NETCore.App.Ref包就是专门存放参考程序集的,它的作用是让编译器识别API定义,但无法在运行时提供功能实现。

运行时需要的是包含实际代码的运行时程序集,这类文件存放在C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.5目录下,这才是CLR实际加载执行的文件。

解决办法

  1. 推荐方案:使用SDK构建命令
    直接用dotnet build或dotnet run处理项目,这些命令会自动处理依赖解析、运行时程序集绑定、生成必要的配置文件(如runtimeconfig.json),无需手动管理引用路径,避免遗漏关键参数。

  2. 手动编译方案:替换为运行时程序集引用
    如果坚持手动调用csc,需要把引用路径替换为运行时程序集的位置,示例命令如下:

dotnet exec "C:\Program Files\dotnet\sdk\7.0.203\Roslyn\bincore\csc.dll" /reference:"C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.5\System.Runtime.dll" /reference:"C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.5\System.Console.dll" /out:test.exe .\test.cs

同时,需要通过dotnet test.exe来运行生成的可执行文件,确保程序能正确定位.NET运行时环境。

内容的提问来源于stack exchange,提问作者user32882

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:15:23