Condividi tramite


Creazione di informazioni relative ai simboli tramite reflection emit

La reflection emit consente di definire informazioni relative ai simboli per un modulo dinamico. È possibile definire informazioni relative ai simboli utilizzando l'interfaccia del writer di simboli predefinita o l'interfaccia di un writer di simboli specificata dal chiamante. La reflection emit fornisce un'utile astrazione di alto livello delle interfacce di writer di simboli di basso livello nello spazio dei nomi System.Diagnostics.SymbolStore.

È necessario che il chiamante indichi che un modulo dinamico dovrà contenere informazioni relative ai simboli chiamando il metodo appropriato per definire il modulo dinamico. Per informazioni sulle varie opzioni per la creazione di moduli dinamici con informazioni relative ai simboli, vedere Definizione di un modulo dinamico. È un errore chiamare un metodo del writer di simboli per un modulo dinamico che non è stato creato per contenere informazioni relative ai simboli.

Sono disponibili i seguenti metodi per la creazione di informazioni relative ai simboli tramite la reflection emit:

  • È possibile ottenere l'interfaccia del writer di simboli associata a un modulo dinamico mediante il metodo ModuleBuilder.GetSymWriter.

  • È possibile definire il punto d'ingresso dell'utente per un modulo dinamico mediante il metodo ModuleBuilder.SetUserEntryPoint. Il punto d'ingresso dell'utente è il metodo che è stato identificato dall'utente come punto d'ingresso anziché gli stub generati dal chiamante prima del metodo principale.

  • Gli oggetti documento vengono definiti tramite il metodo ModuleBuilder.DefineDocument.

  • Gli attributi personalizzati memorizzati nell'archivio simboli vengono definiti per moduli, metodi e costruttori utilizzando, rispettivamente, i metodi ModuleBuilder.SetSymCustomAttribute, MethodBuilder.SetSymCustomAttribute e ConstructorBuilder.SetSymCustomAttribute.

  • I punti di sequenza vengono identificati utilizzando il metodo ILGenerator.MarkSequencePoint.

  • Gli ambiti lessicali vengono definiti utilizzando i metodi ILGenerator.BeginScope e ILGenerator.EndScope.

  • È possibile impostare il nome di una variabile locale in un metodo o in un costruttore mediante il metodo LocalBuilder.SetLocalSymInfo. Facoltativamente è possibile specificare l'ambito lessicale della variabile locale. L'oggetto LocalBuilder viene ottenuto chiamando ILGenerator.DeclareLocal.

Vedere anche

Altre risorse

Utilizzo della reflection emit