6

我正在使用 T4Template 和 codeDOM 使用以下代码创建程序集:

CompilerParameters Params = new CompilerParameters();
            Params.GenerateExecutable = true;
            Params.ReferencedAssemblies.Add("System.dll");
            Params.OutputAssembly = "myfile.exe";

            RuntimeTextTemplate1 RTT = new RuntimeTextTemplate1();
            string Source = RTT.TransformText();

            CompilerResults Create = new CSharpCodeProvider().CompileAssemblyFromSource(Params, Source);

模板看起来像这样(暂时):

<#@ template language="C#" #>
namespace Application
{
  class Program
  {
     static void Main()
     {
       byte[] buffer = new byte[1024];
       //And some code for creating a file with the bytes in the buffer.
     }
  }
}

在主应用程序中,我有一个字节数组,其中包含某个应用程序的一些字节,这些字节在运行时加载到数组中。

我的问题是:

  • 如何将包含数据(字节)的字节数组传递到()中的 T4Template 中,byte[] buffer = new byte[1024];因此当使用模板中编写的代码创建程序集时,数组应包含字节。
4

1 回答 1

0

就个人而言,我更喜欢在运行时将数据传递给生成的代码,但如果你真的需要将它嵌入到你生成的程序集中,那么你可以这样做:

添加一个带有字节数组参数的类功能块作为其中的成员,然后您将能够从运行时模板中设置它并在模板中访问它。类似于以下内容

<#@ template language="C#" #>
namespace Application
{
  class Program
  {
     static void Main()
     {
       byte[] buffer = new byte[1024] { <#= BufferValue.Select(b => "0x" + b.ToString("X2")).Aggregate((f, s) => f + ", " + s) #> };
       //And some code for creating a file with the bytes in the buffer.
     }
  }
}
<#+

public byte[] BufferValue { get; set; } 

#>

RTT.BufferValue然后在调用模板之前设置为您的数组。

于 2013-05-03T02:55:08.480 回答