2013-05-02 16 views
6

sto usando T4Template e CodeDOM per creare un assieme utilizzando il seguente codice:passare un array di byte al codice T4 modello in un altro array dello stesso tipo

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

Il modello si presenta così (per ora) :

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

Nell'applicazione principale ho un array di byte che contiene alcuni byte di una certa applicazione, questi byte vengono caricati nella matrice in fase di esecuzione.

La mia domanda è:

  • Come posso passare la matrice di byte, che contiene dati (byte) nel T4Template nella (byte[] buffer = new byte[1024];) in modo che quando si crea il gruppo con il codice scritto nel template, l'array deve contenere i byte.

risposta

0

Personalmente, preferisco passare i dati al codice generato in fase di esecuzione, ma se si ha realmente bisogno di incorporare all'interno del vostro assembly generato, allora si potrebbe fare qualcosa di simile:

Aggiungi un funzione di blocco di classe con un parametro array di byte come membro in esso, allora sarete in grado di impostare che dal modello di runtime e accedervi nel modello. Qualcosa di simile a quanto segue

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

#> 

Poi basta impostare RTT.BufferValue per l'array prima di richiamare il modello.

Problemi correlati