有没有人知道在使用CSharpCompilation的extensionmethod Emit发射程序集时是否可以指定Framework-Version?
我们需要明确地定位4.5.1,否则我们会得到一个讨厌的运行时错误:
MissingMethodException Method not found: '!!0[] System.Array.Empty()'.
或者我们是否必须等到客户升级到Framework 4.6才能使用Roslyn?
编译器没有(并且从未)具有"框架版本"的概念.所有编译器都理解的是包含哪些引用集.听起来您正在使用对4.6版本框架的引用来创建编译(可能因为您正在使用正在运行的程序集位置,并且正在运行4.6).
相反,您需要确保安装了4.5.1目标包(VS安装会自动执行此操作,但其他计算机可能没有),并从中添加对您的编译的引用C:\Program Files (x86)\Reference Assemblies
.
Array.Empty
如果引用的程序集中存在引用,则编译器将发出引用,但如果不存在,则具有回退逻辑.