使用 Roslyn RC 发送到 DynamicAssembly
Emit to DynamicAssembly with Roslyn RC
从许多编译 Roslyn SyntaxTree 的示例中,我看到了如下代码:
[... create tree and compilation ...]
var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("foo"), AssemblyBuilderAccess.RunAndCollect);
var module = assembly.DefineDynamicModule("foo");
var result = compilation.Emit(module);
但是当我尝试在使用 Visual Studio 2015 RC 发布的当前 Roslyn 中执行此操作时,我看不到 Emit()
需要一个模块。我需要写入流并将其加载到常规 AppDomain
-locked Assembly
.
然后我看到了 Tomas Matousek 的回答:
他说这已被删除,因为它是 "problematic"。
我很难在 Internet 上找到关于此的任何其他信息。有谁知道如果:
- Roslyn 中还有另一种方法可以编译成可以被垃圾回收的程序集吗?
- 或者这将在 VS / Roslyn 的最终版本中得到支持?
- 如果这里没有人知道,我应该把这个问题指向哪里(找不到官方的、活跃的 Roslyn 论坛)?
正如 svick 和 JoshVarty 在评论中所说,目前这是不可能的。我还为此创建了一个问题 (https://github.com/dotnet/roslyn/issues/2621),它可能会或可能不会从 Microsoft 团队那里获得更多信息。
从许多编译 Roslyn SyntaxTree 的示例中,我看到了如下代码:
[... create tree and compilation ...]
var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("foo"), AssemblyBuilderAccess.RunAndCollect);
var module = assembly.DefineDynamicModule("foo");
var result = compilation.Emit(module);
但是当我尝试在使用 Visual Studio 2015 RC 发布的当前 Roslyn 中执行此操作时,我看不到 Emit()
需要一个模块。我需要写入流并将其加载到常规 AppDomain
-locked Assembly
.
然后我看到了 Tomas Matousek 的回答:
他说这已被删除,因为它是 "problematic"。
我很难在 Internet 上找到关于此的任何其他信息。有谁知道如果:
- Roslyn 中还有另一种方法可以编译成可以被垃圾回收的程序集吗?
- 或者这将在 VS / Roslyn 的最终版本中得到支持?
- 如果这里没有人知道,我应该把这个问题指向哪里(找不到官方的、活跃的 Roslyn 论坛)?
正如 svick 和 JoshVarty 在评论中所说,目前这是不可能的。我还为此创建了一个问题 (https://github.com/dotnet/roslyn/issues/2621),它可能会或可能不会从 Microsoft 团队那里获得更多信息。