为CSharpCompilation.Emit指定框架版本

时间:2015-12-14 08:39:01

标签: c# roslyn roslyn-code-analysis

有没有人知道在使用CSharpCompilation&扩展方法Emit发送程序集时是否可以指定Framework-Version?

我们需要明确地定位4.5.1,否则我们会得到一个讨厌的运行时错误:

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

或者我们是否必须等到客户升级到Framework 4.6才能使用Roslyn?

1 个答案:

答案 0 :(得分:7)

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

相反,您需要确保安装了4.5.1目标包(VS安装会自动执行此操作,但其他计算机可能没有),并从{{1}中添加对您的编译的引用}}

如果C:\Program Files (x86)\Reference Assemblies存在于引用的程序集中,编译器将发出对Array.Empty的引用,但如果不存在,则具有回退逻辑。