为 CSharpCompilation.Emit 指定框架版本
Specify Framework Version for CSharpCompilation.Emit
有谁知道在使用 CSharpCompilation 的扩展方法 Emit 发出程序集时是否可以指定框架版本?
我们显然需要以 4.5.1 为目标,否则我们会遇到严重的运行时错误:
MissingMethodException
Method not found: '!!0[] System.Array.Empty()'.
或者我们是否必须等到客户端升级到 Framework 4.6 才能使用 Roslyn?
编译器没有(也从来没有)有 "framework version" 的概念。编译器只知道包含了哪些引用集。听起来您是在参考 4.6 版本的框架创建编译(可能是因为您正在使用 运行 程序集位置,并且在 4.6 上是 运行)。
相反,您需要确保安装了 4.5.1 目标包(VS 安装会自动执行此操作,但其他机器可能没有),并从 C:\Program Files (x86)\Reference Assemblies
.
如果引用的程序集中存在 Array.Empty
,编译器将发出对 Array.Empty
的引用,但如果不存在,则具有回退逻辑。
有谁知道在使用 CSharpCompilation 的扩展方法 Emit 发出程序集时是否可以指定框架版本?
我们显然需要以 4.5.1 为目标,否则我们会遇到严重的运行时错误:
MissingMethodException
Method not found: '!!0[] System.Array.Empty()'.
或者我们是否必须等到客户端升级到 Framework 4.6 才能使用 Roslyn?
编译器没有(也从来没有)有 "framework version" 的概念。编译器只知道包含了哪些引用集。听起来您是在参考 4.6 版本的框架创建编译(可能是因为您正在使用 运行 程序集位置,并且在 4.6 上是 运行)。
相反,您需要确保安装了 4.5.1 目标包(VS 安装会自动执行此操作,但其他机器可能没有),并从 C:\Program Files (x86)\Reference Assemblies
.
如果引用的程序集中存在 Array.Empty
,编译器将发出对 Array.Empty
的引用,但如果不存在,则具有回退逻辑。