2013-05-02 15 views
6

używam T4Template i codeDOM stworzyć zespół za pomocą następującego kodu:przekazać tablicę bajtów kodu T4 szablonu na inną tablicę samego typu

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); 

Szablon wygląda następująco (na chwilę) :

<#@ 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. 
    } 
    } 
} 

W głównym zastosowania I mają szereg bajtów, który zawiera kilka bajtów pewnych zastosowań te bajty są ładowane do układu w czasie pracy.

Moje pytanie brzmi:

  • Jak mogę przekazać tablicę bajtów, który zawiera dane (bajty) do T4Template w (byte[] buffer = new byte[1024];), więc kiedy zespół jest utworzony z kodu napisanego w Szablon, tablica powinna zawierać bajty.

Odpowiedz

0

Osobiście wolałbym, aby przekazać dane do wygenerowanego kodu w czasie wykonywania, ale jeśli naprawdę potrzebujesz, aby umieścić go w swojej wygenerowanego montażu, a następnie można zrobić coś takiego:

dodać blok funkcji klasy z parametrem tablicy bajtowej jako członkiem, możesz go ustawić z szablonu środowiska wykonawczego i uzyskać do niego dostęp w szablonie. Coś jak na poniższym

<#@ 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; } 

#> 

Następnie wystarczy ustawić RTT.BufferValue do macierzy przed wywołaniem szablon.

Powiązane problemy