4

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

我们显然需要以 4.5.1 为目标,否则我们会得到一个令人讨厌的运行时错误:

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

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

4

1 回答 1

9

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

相反,您需要确保已安装 4.5.1 目标包(VS install 会自动执行此操作,但其他机器可能没有),并从C:\Program Files (x86)\Reference Assemblies.

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

于 2015-12-14T13:23:32.157 回答