Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 50355|Risposta: 0

[Fonte] .NET/C# Emit genera dinamicamente gli assembly

[Copiato link]
Pubblicato il 21-03-2021 12:38:34 | | | |
Gli scenari applicabili, tramite il nostro codice C#, generano dinamicamente un EXE, i suoi scenari applicativi possono essere molti, come l'autorizzazione software, puoi inserire le informazioni di autorizzazione, generare una DLL autorizzata, ecc., quindi come ottenere questa funzione dobbiamo menzionare un Emissione tecnica.

1. Panoramica di Emit

Emettere può essere chiamato emettere o generare. In Framework, le classi correlate a Emit esistono fondamentalmente sotto il namespace System.Reflection.Emit. Si può vedere che Emit esiste come elemento di riflessione. Parlando di riflessione, tutti dovrebbero conoscerla, ci permette di vedere gli elementi dell'assemblaggio, così da ottenere una grande quantità di informazioni come quali tipi contiene l'assemblaggio, quali metodi contiene il tipo, e così via. Ma le riflessioni possono essere solo 'viste', mentre Emit può generare codice dinamicamente a runtime. Diamo un'occhiata a come generare codice con Emit.

2. Modulo di Assemblaggio e Gestito

Un assembly è un raggruppamento logico di uno o più moduli, file risorse, e secondariamente un assembly è l'unità più piccola di riutilizzo, sicurezza e versioning. Le DLL e gli EXE che vediamo possono essere chiamati assembly, un assembly contiene più moduli, ma di solito, quando VS compiliamo compiliamo solo un modulo; se vogliamo compilare più moduli in un assembly, dobbiamo usare csc.exe implementazione.

3. Generare dinamicamente operazioni di codice

Prima di tutto, dobbiamo capire da quale tipo è rappresentato ciascun tipo dinamico in .NET.

Assembly: System.Reflection.Emit.AssemblyBuilder (definisce e rappresenta assemblaggi dinamici)

Costruttore: System.Reflection.Emit.ConstructorBuilder (un costruttore che definisce e rappresenta classi dinamiche)

Attributo personalizzato: System.Reflection.Emit.CustomAttributeBuilder (aiuta a generare attributi personalizzati utilizzando parametri passati dal costruttore per generare attributi per le classi)

Enum: System.Reflection.Emit.EnumBuilder (spiega e indica il tipo di enum)

Event: System.Reflection.Emit.EventBuilder (evento che definisce la classe)

Campo: System.Reflection.Emit.FieldBuilder (Definisce e rappresenta i campi.) non può ereditare tale classe)

Variabili locali: System.Reflection.Emit.LocalBuilder (rappresenta variabili locali all'interno di un metodo o costruttore)

Metodo: System.Reflection.Emit.MethodBuilder (un metodo (o costruttore) che definisce e rappresenta una classe dinamica)

Modulo: System.Reflection.Emit.ModuleBuilder (definisce e rappresenta i moduli negli assemblaggi dinamici)

Parametro: System.Reflection.Emit.ParameterBuilder (creare o associare informazioni sui parametri come parametri di metodo, parametri di evento, ecc.)

Proprietà: System.Reflection.Emit.PropertyBuilder (Definisci il tipo di proprietà)

Class: System.Reflection.Emit.TypeBuilder (definire e creare una nuova istanza della classe a runtime)

OpCode è una descrizione di una direttiva di linguaggio intermedio (IL). Ci sono molte istruzioni a riguardo, puoi controllare il sito ufficiale di Microsoft:Il login del link ipertestuale è visibile.

Restrizioni di accesso a AssemblyBuilderAccess

AssemblyBuilderAccess.Run; Indica che l'assemblaggio può essere eseguito, ma non salvato.
AssemblyBuilderAccess.Save; Indica che l'assembly può essere salvato, ma non eseguito.
AssemblyBuilderAccess.RunAndSave; Indica che l'assemblaggio può essere salvato ed eseguito.
AssemblyBuilderAccess.ReflectionOnly; Indica che gli assembly possono essere usati solo in un contesto riflessivo e non possono essere eseguiti.
AssemblyBuilderAccess.RunAndCollect; Indica che l'assembly può essere scaricato e la memoria viene recuperata.

Il codice è il seguente:

Innanzitutto, usare emit per generare codice IL, poi generare dinamicamente un assembly e infine caricare l'assembly e richiamare i suoi metodi, come mostrato nella figura sottostante:



Usa ILSpy per visualizzare il codice generato come mostrato nell'immagine sottostante:



(Fine)





Precedente:La differenza tra il compilatore Roslyn MSBuild
Prossimo:Test delle prestazioni di riflessione, emissione e espressione .NET/C#
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com