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