我正在使用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.
}
}
}
在Main应用程序中,我有一个字节数组,其中包含某个应用程序的某些字节,这些字节在运行时被加载到数组中。
我的问题是:
byte[] buffer = new byte[1024];
)所以当
使用模板(数组)中编写的代码创建程序集
应该包含字节。答案 0 :(得分: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
设置为您的数组。