指定 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?
编译器没有(也从来没有(有"框架版本"的概念。编译器只了解包含哪些引用集。听起来您正在使用对框架 4.6 版本的引用来创建编译(可能是因为您使用的是正在运行的程序集位置,并且在 4.6 上运行(。
相反,您需要确保已安装 4.5.1 目标包(VS install 会自动执行此操作,但其他计算机可能没有(,并将其引用添加到您的编译中 C:'Program Files (x86)'Reference Assemblies
.
如果引用的程序集中存在对Array.Empty
的引用,编译器将发出对它的引用,但如果不存在,则具有回退逻辑。