指定 CSharpCompilation.Emit 的框架版本

本文关键字:框架 版本 Emit CSharpCompilation 指定 | 更新日期: 2023-09-27 18:26:44

有谁知道在使用CSharpCompilation的扩展方法Emit发出程序集时是否可以指定框架版本?

我们

显然需要针对 4.5.1,否则我们会收到一个讨厌的运行时错误:

MissingMethodException
Method not found: '!!0[] System.Array.Empty()'.

还是我们必须等到客户端升级到 Framework 4.6 才能使用 Roslyn?

指定 CSharpCompilation.Emit 的框架版本

编译器没有(也从来没有(有"框架版本"的概念。编译器只了解包含哪些引用集。听起来您正在使用对框架 4.6 版本的引用来创建编译(可能是因为您使用的是正在运行的程序集位置,并且在 4.6 上运行(。

相反,您需要确保已安装 4.5.1 目标包(VS install 会自动执行此操作,但其他计算机可能没有(,并将其引用添加到您的编译中 C:'Program Files (x86)'Reference Assemblies .

如果引用的程序集中存在对Array.Empty的引用,编译器将发出对它的引用,但如果不存在,则具有回退逻辑。