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

netstandard2.0中Microsoft.CodeAnalysis.CSharp编译含dynamic代码报错

解决netstandard2.0中使用Microsoft.CodeAnalysis.CSharp编译含dynamic代码的CS1980错误

出现CS1980异常(找不到System.Runtime.CompilerServices.DynamicAttribute)的核心原因是:在netstandard2.0环境下,使用Roslyn编译含dynamic关键字的代码时,必须显式添加对相关依赖程序集的引用,默认编译配置不会自动引入这些支持动态类型的组件。

解决步骤:

1. 编译时显式添加必要的程序集引用

在创建CSharpCompilation实例时,必须包含以下关键程序集的引用:

  • Microsoft.CSharp.dll:提供动态绑定的运行时支持
  • System.Runtime.dll:包含DynamicAttribute类型
  • 基础的核心程序集(如object、Task所在的程序集)

示例代码:

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;

// 解析待编译代码为语法树
var parseOptions = CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp7_3);
var syntaxTree = CSharpSyntaxTree.ParseText(yourCodeString, parseOptions);

// 构建编译引用集合
var references = new[]
{
    // 基础类型所在程序集
    MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
    // Task类型所在程序集
    MetadataReference.CreateFromFile(typeof(Task).Assembly.Location),
    // 动态绑定支持程序集
    MetadataReference.CreateFromFile(typeof(Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo).Assembly.Location),
    // DynamicAttribute所在程序集
    MetadataReference.CreateFromFile(typeof(System.Runtime.CompilerServices.DynamicAttribute).Assembly.Location)
};

// 创建编译实例
var compilation = CSharpCompilation.Create(
    "YourAssemblyName",
    syntaxTrees: new[] { syntaxTree },
    references: references,
    options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
        .WithLanguageVersion(LanguageVersion.CSharp7_3)
);

// 执行编译并检查结果
var emitResult = compilation.Emit("YourOutputAssembly.dll");

2. 确保项目依赖正确

在你的netstandard2.0类库项目中,通过NuGet安装以下包,确保编译时能找到对应的程序集:

  • Microsoft.CSharp
  • System.Runtime

3. 验证C#版本配置一致性

确保CSharpParseOptions和CSharpCompilationOptions的语言版本保持一致(均设置为C#7.3或更高,只要你的代码兼容即可),避免版本不匹配导致的隐性问题。

关键说明

dynamic关键字的编译依赖DynamicAttribute和动态绑定运行时组件,这些在.NET Framework或.NET 8中可能被自动引入,但在netstandard2.0环境下,Roslyn不会自动加载这些程序集,必须手动添加引用才能完成编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:53:29