使用T4和C#在运行时编译动态代码

Iam*_*mIC 10 .net c# t4 code-generation

我一直在使用TextTemplatingFilePreprocessor上T4阅读文章展示了如何动态地生成成为项目的一部分,并与该项目编译的代码.

是否可以使用T4生成在运行时编译,输出到DLL并加载和执行的代码,所述代码可以访问与dll相关的常用可见性功能?

如果是的话,请你指点一个例子.

我有效地尝试使用IL生成动态dll,而不是使用C#.

编辑

我需要的具体案例很简单.我正在编写一个消息路由器,用于将消息路由到服务.服务可以是本地的或远程的.声明性脚本编译为C#.动态部分是"这项服务是本地还是远程服务?".输出C#相应地改变.本地/远程的路由风格不同,因此具有动态特性.

这是我需要的一个例子.

svi*_*ick 5

为此,您需要了解两件事:

  1. 您可以使用运行时 T4 模板在运行时生成一些文本,包括 C# 源代码。
  2. 您可以使用CSharpCodeProvider在运行时从文本编译程序集。或者您可以在生成的文本上手动运行 csc.exe(命令行 C# 编译器),但这会更复杂。(实际上CSharpCodeProvider在幕后正是这样做的。)

代码可能如下所示:

var template = new RuntimeTextTemplate();
string code = template.TransformText();

var compiler = new CSharpCodeProvider();
var result = compiler.CompileAssemblyFromSource(
    new CompilerParameters { OutputAssembly = "assembly.dll" }, code);
Run Code Online (Sandbox Code Playgroud)