AssemblyBuilder Classe

Definizione

Definisce e rappresenta un assembly dinamico.

public ref class AssemblyBuilder sealed : System::Reflection::Assembly, System::Runtime::InteropServices::_AssemblyBuilder
public ref class AssemblyBuilder sealed : System::Reflection::Assembly
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class AssemblyBuilder : System.Reflection.Assembly, System.Runtime.InteropServices._AssemblyBuilder
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class AssemblyBuilder : System.Reflection.Assembly, System.Runtime.InteropServices._AssemblyBuilder
public sealed class AssemblyBuilder : System.Reflection.Assembly
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type AssemblyBuilder = class
    inherit Assembly
    interface _AssemblyBuilder
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type AssemblyBuilder = class
    inherit Assembly
    interface _AssemblyBuilder
type AssemblyBuilder = class
    inherit Assembly
Public NotInheritable Class AssemblyBuilder
Inherits Assembly
Implements _AssemblyBuilder
Public NotInheritable Class AssemblyBuilder
Inherits Assembly
Ereditarietà
AssemblyBuilder
Attributi
Implementazioni

Esempio

Nell'esempio di codice seguente viene illustrato come definire e usare un assembly dinamico. L'assembly di esempio contiene un tipo, MyDynamicType, con un campo privato, una proprietà che ottiene e imposta il campo privato, i costruttori che inizializzano il campo privato e un metodo che moltiplica un numero fornito dall'utente per il valore del campo privato e restituisce il risultato.

using System;
using System.Reflection;
using System.Reflection.Emit;

class DemoAssemblyBuilder
{
    public static void Main()
    {
        // This code creates an assembly that contains one type,
        // named "MyDynamicType", that has a private field, a property
        // that gets and sets the private field, constructors that
        // initialize the private field, and a method that multiplies
        // a user-supplied number by the private field value and returns
        // the result. In C# the type might look like this:
        /*
        public class MyDynamicType
        {
            private int m_number;

            public MyDynamicType() : this(42) {}
            public MyDynamicType(int initNumber)
            {
                m_number = initNumber;
            }

            public int Number
            {
                get { return m_number; }
                set { m_number = value; }
            }

            public int MyMethod(int multiplier)
            {
                return m_number * multiplier;
            }
        }
        */

        var aName = new AssemblyName("DynamicAssemblyExample");
        AssemblyBuilder ab =
            AssemblyBuilder.DefineDynamicAssembly(
                aName,
                AssemblyBuilderAccess.Run);

        // The module name is usually the same as the assembly name.
        ModuleBuilder mb = ab.DefineDynamicModule(aName.Name ?? "DynamicAssemblyExample");

        TypeBuilder tb = mb.DefineType(
            "MyDynamicType",
             TypeAttributes.Public);

        // Add a private field of type int (Int32).
        FieldBuilder fbNumber = tb.DefineField(
            "m_number",
            typeof(int),
            FieldAttributes.Private);

        // Define a constructor that takes an integer argument and
        // stores it in the private field.
        Type[] parameterTypes = { typeof(int) };
        ConstructorBuilder ctor1 = tb.DefineConstructor(
            MethodAttributes.Public,
            CallingConventions.Standard,
            parameterTypes);

        ILGenerator ctor1IL = ctor1.GetILGenerator();
        // For a constructor, argument zero is a reference to the new
        // instance. Push it on the stack before calling the base
        // class constructor. Specify the default constructor of the
        // base class (System.Object) by passing an empty array of
        // types (Type.EmptyTypes) to GetConstructor.
        ctor1IL.Emit(OpCodes.Ldarg_0);
        ConstructorInfo? ci = typeof(object).GetConstructor(Type.EmptyTypes);
        ctor1IL.Emit(OpCodes.Call, ci!);
        // Push the instance on the stack before pushing the argument
        // that is to be assigned to the private field m_number.
        ctor1IL.Emit(OpCodes.Ldarg_0);
        ctor1IL.Emit(OpCodes.Ldarg_1);
        ctor1IL.Emit(OpCodes.Stfld, fbNumber);
        ctor1IL.Emit(OpCodes.Ret);

        // Define a default constructor that supplies a default value
        // for the private field. For parameter types, pass the empty
        // array of types or pass null.
        ConstructorBuilder ctor0 = tb.DefineConstructor(
            MethodAttributes.Public,
            CallingConventions.Standard,
            Type.EmptyTypes);

        ILGenerator ctor0IL = ctor0.GetILGenerator();
        // For a constructor, argument zero is a reference to the new
        // instance. Push it on the stack before pushing the default
        // value on the stack, then call constructor ctor1.
        ctor0IL.Emit(OpCodes.Ldarg_0);
        ctor0IL.Emit(OpCodes.Ldc_I4_S, 42);
        ctor0IL.Emit(OpCodes.Call, ctor1);
        ctor0IL.Emit(OpCodes.Ret);

        // Define a property named Number that gets and sets the private
        // field.
        //
        // The last argument of DefineProperty is null, because the
        // property has no parameters. (If you don't specify null, you must
        // specify an array of Type objects. For a parameterless property,
        // use the built-in array with no elements: Type.EmptyTypes)
        PropertyBuilder pbNumber = tb.DefineProperty(
            "Number",
            PropertyAttributes.HasDefault,
            typeof(int),
            null);

        // The property "set" and property "get" methods require a special
        // set of attributes.
        MethodAttributes getSetAttr = MethodAttributes.Public |
            MethodAttributes.SpecialName | MethodAttributes.HideBySig;

        // Define the "get" accessor method for Number. The method returns
        // an integer and has no arguments. (Note that null could be
        // used instead of Types.EmptyTypes)
        MethodBuilder mbNumberGetAccessor = tb.DefineMethod(
            "get_Number",
            getSetAttr,
            typeof(int),
            Type.EmptyTypes);

        ILGenerator numberGetIL = mbNumberGetAccessor.GetILGenerator();
        // For an instance property, argument zero is the instance. Load the
        // instance, then load the private field and return, leaving the
        // field value on the stack.
        numberGetIL.Emit(OpCodes.Ldarg_0);
        numberGetIL.Emit(OpCodes.Ldfld, fbNumber);
        numberGetIL.Emit(OpCodes.Ret);

        // Define the "set" accessor method for Number, which has no return
        // type and takes one argument of type int (Int32).
        MethodBuilder mbNumberSetAccessor = tb.DefineMethod(
            "set_Number",
            getSetAttr,
            null,
            new Type[] { typeof(int) });

        ILGenerator numberSetIL = mbNumberSetAccessor.GetILGenerator();
        // Load the instance and then the numeric argument, then store the
        // argument in the field.
        numberSetIL.Emit(OpCodes.Ldarg_0);
        numberSetIL.Emit(OpCodes.Ldarg_1);
        numberSetIL.Emit(OpCodes.Stfld, fbNumber);
        numberSetIL.Emit(OpCodes.Ret);

        // Last, map the "get" and "set" accessor methods to the
        // PropertyBuilder. The property is now complete.
        pbNumber.SetGetMethod(mbNumberGetAccessor);
        pbNumber.SetSetMethod(mbNumberSetAccessor);

        // Define a method that accepts an integer argument and returns
        // the product of that integer and the private field m_number. This
        // time, the array of parameter types is created on the fly.
        MethodBuilder meth = tb.DefineMethod(
            "MyMethod",
            MethodAttributes.Public,
            typeof(int),
            new Type[] { typeof(int) });

        ILGenerator methIL = meth.GetILGenerator();
        // To retrieve the private instance field, load the instance it
        // belongs to (argument zero). After loading the field, load the
        // argument one and then multiply. Return from the method with
        // the return value (the product of the two numbers) on the
        // execution stack.
        methIL.Emit(OpCodes.Ldarg_0);
        methIL.Emit(OpCodes.Ldfld, fbNumber);
        methIL.Emit(OpCodes.Ldarg_1);
        methIL.Emit(OpCodes.Mul);
        methIL.Emit(OpCodes.Ret);

        // Finish the type.
        Type? t = tb.CreateType();

        // Because AssemblyBuilderAccess includes Run, the code can be
        // executed immediately. Start by getting reflection objects for
        // the method and the property.
        MethodInfo? mi = t?.GetMethod("MyMethod");
        PropertyInfo? pi = t?.GetProperty("Number");

        // Create an instance of MyDynamicType using the default
        // constructor.
        object? o1 = null;
        if (t is not null)
            o1 = Activator.CreateInstance(t);

        // Display the value of the property, then change it to 127 and
        // display it again. Use null to indicate that the property
        // has no index.
        Console.WriteLine("o1.Number: {0}", pi?.GetValue(o1, null));
        pi?.SetValue(o1, 127, null);
        Console.WriteLine("o1.Number: {0}", pi?.GetValue(o1, null));

        // Call MyMethod, passing 22, and display the return value, 22
        // times 127. Arguments must be passed as an array, even when
        // there is only one.
        object[] arguments = { 22 };
        Console.WriteLine("o1.MyMethod(22): {0}",
            mi?.Invoke(o1, arguments));

        // Create an instance of MyDynamicType using the constructor
        // that specifies m_Number. The constructor is identified by
        // matching the types in the argument array. In this case,
        // the argument array is created on the fly. Display the
        // property value.
        object? o2 = null;
        if (t is not null)
            o2 = Activator.CreateInstance(t, new object[] { 5280 });
        Console.WriteLine("o2.Number: {0}", pi?.GetValue(o2, null));
    }
}

/* This code produces the following output:

o1.Number: 42
o1.Number: 127
o1.MyMethod(22): 2794
o2.Number: 5280
 */
open System
open System.Threading
open System.Reflection
open System.Reflection.Emit

// This code creates an assembly that contains one type,
// named "MyDynamicType", that has a private field, a property
// that gets and sets the private field, constructors that
// initialize the private field, and a method that multiplies
// a user-supplied number by the private field value and returns
// the result. In C# the type might look like this:
(*
public class MyDynamicType
{
    private int m_number;

    public MyDynamicType() : this(42) {}
    public MyDynamicType(int initNumber)
    {
        m_number = initNumber;
    }

    public int Number
    {
        get { return m_number; }
        set { m_number = value; }
    }

    public int MyMethod(int multiplier)
    {
        return m_number * multiplier;
    }
}
*)

let assemblyName = new AssemblyName("DynamicAssemblyExample")
let assemblyBuilder =
    AssemblyBuilder.DefineDynamicAssembly(
        assemblyName,
        AssemblyBuilderAccess.Run)

// The module name is usually the same as the assembly name.
let moduleBuilder =
    assemblyBuilder.DefineDynamicModule(assemblyName.Name)

let typeBuilder =
    moduleBuilder.DefineType(
        "MyDynamicType",
        TypeAttributes.Public)

// Add a private field of type int (Int32)
let fieldBuilderNumber =
    typeBuilder.DefineField(
        "m_number",
        typeof<int>,
        FieldAttributes.Private)

// Define a constructor1 that takes an integer argument and
// stores it in the private field.
let parameterTypes = [| typeof<int> |]
let ctor1 =
    typeBuilder.DefineConstructor(
        MethodAttributes.Public,
        CallingConventions.Standard,
        parameterTypes)

let ctor1IL = ctor1.GetILGenerator()

// For a constructor, argument zero is a reference to the new
// instance. Push it on the stack before calling the base
// class constructor. Specify the default constructor of the
// base class (System.Object) by passing an empty array of
// types (Type.EmptyTypes) to GetConstructor.
ctor1IL.Emit(OpCodes.Ldarg_0)
ctor1IL.Emit(OpCodes.Call,
                 typeof<obj>.GetConstructor(Type.EmptyTypes))

// Push the instance on the stack before pushing the argument
// that is to be assigned to the private field m_number.
ctor1IL.Emit(OpCodes.Ldarg_0)
ctor1IL.Emit(OpCodes.Ldarg_1)
ctor1IL.Emit(OpCodes.Stfld, fieldBuilderNumber)
ctor1IL.Emit(OpCodes.Ret)

// Define a default constructor1 that supplies a default value
// for the private field. For parameter types, pass the empty
// array of types or pass null.
let ctor0 =
    typeBuilder.DefineConstructor(
        MethodAttributes.Public,
        CallingConventions.Standard,
        Type.EmptyTypes)

let ctor0IL = ctor0.GetILGenerator()
// For a constructor, argument zero is a reference to the new
// instance. Push it on the stack before pushing the default
// value on the stack, then call constructor ctor1.
ctor0IL.Emit(OpCodes.Ldarg_0)
ctor0IL.Emit(OpCodes.Ldc_I4_S, 42)
ctor0IL.Emit(OpCodes.Call, ctor1)
ctor0IL.Emit(OpCodes.Ret)

// Define a property named Number that gets and sets the private
// field.
//
// The last argument of DefineProperty is null, because the
// property has no parameters. (If you don't specify null, you must
// specify an array of Type objects. For a parameterless property,
// use the built-in array with no elements: Type.EmptyTypes)
let propertyBuilderNumber =
    typeBuilder.DefineProperty(
        "Number",
        PropertyAttributes.HasDefault,
        typeof<int>,
        null)

// The property "set" and property "get" methods require a special
// set of attributes.
let getSetAttr = MethodAttributes.Public ||| MethodAttributes.SpecialName ||| MethodAttributes.HideBySig

// Define the "get" accessor method for Number. The method returns
// an integer and has no arguments. (Note that null could be
// used instead of Types.EmptyTypes)
let methodBuilderNumberGetAccessor =
    typeBuilder.DefineMethod(
        "get_number",
        getSetAttr,
        typeof<int>,
        Type.EmptyTypes)

let numberGetIL =
    methodBuilderNumberGetAccessor.GetILGenerator()

// For an instance property, argument zero ir the instance. Load the
// instance, then load the private field and return, leaving the
// field value on the stack.
numberGetIL.Emit(OpCodes.Ldarg_0)
numberGetIL.Emit(OpCodes.Ldfld, fieldBuilderNumber)
numberGetIL.Emit(OpCodes.Ret)

// Define the "set" accessor method for Number, which has no return
// type and takes one argument of type int (Int32).
let methodBuilderNumberSetAccessor =
    typeBuilder.DefineMethod(
        "set_number",
        getSetAttr,
        null,
        [| typeof<int> |])

let numberSetIL =
    methodBuilderNumberSetAccessor.GetILGenerator()
// Load the instance and then the numeric argument, then store the
// argument in the field
numberSetIL.Emit(OpCodes.Ldarg_0)
numberSetIL.Emit(OpCodes.Ldarg_1)
numberSetIL.Emit(OpCodes.Stfld, fieldBuilderNumber)
numberSetIL.Emit(OpCodes.Ret)

// Last, map the "get" and "set" accessor methods to the
// PropertyBuilder. The property is now complete.
propertyBuilderNumber.SetGetMethod(methodBuilderNumberGetAccessor)
propertyBuilderNumber.SetSetMethod(methodBuilderNumberSetAccessor)

// Define a method that accepts an integer argument and returns
// the product of that integer and the private field m_number. This
// time, the array of parameter types is created on the fly.
let methodBuilder =
    typeBuilder.DefineMethod(
        "MyMethod",
        MethodAttributes.Public,
        typeof<int>,
        [| typeof<int> |])

let methodIL = methodBuilder.GetILGenerator()
// To retrieve the private instance field, load the instance it
// belongs to (argument zero). After loading the field, load the
// argument one and then multiply. Return from the method with
// the return value (the product of the two numbers) on the
// execution stack.
methodIL.Emit(OpCodes.Ldarg_0)
methodIL.Emit(OpCodes.Ldfld, fieldBuilderNumber)
methodIL.Emit(OpCodes.Ldarg_1)
methodIL.Emit(OpCodes.Mul)
methodIL.Emit(OpCodes.Ret)

// Finish the type
let typ = typeBuilder.CreateType()

// Because AssemblyBuilderAccess includes Run, the code can be
// executed immediately. Start by getting reflection objects for
// the method and the property.
let methodInfo = typ.GetMethod("MyMethod")
let propertyInfo = typ.GetProperty("Number")

// Create an instance of MyDynamicType using the default
// constructor.
let obj1 = Activator.CreateInstance(typ)

// Display the value of the property, then change it to 127 and
// display it again. Use null to indicate that the property
// has no index.
printfn "obj1.Number: %A" (propertyInfo.GetValue(obj1, null))
propertyInfo.SetValue(obj1, 127, null)
printfn "obj1.Number: %A" (propertyInfo.GetValue(obj1, null))

// Call MyMethod, pasing 22, and display the return value, 22
// times 127. Arguments must be passed as an array, even when
// there is only one.
let arguments: obj array = [| 22 |]
printfn "obj1.MyMethod(22): %A" (methodInfo.Invoke(obj1, arguments))

// Create an instance of MyDynamicType using the constructor
// that specifies m_Number. The constructor is identified by
// matching the types in the argument array. In this case,
// the argument array is created on the fly. Display the
// property value.
let constructorArguments: obj array = [| 5280 |]
let obj2 = Activator.CreateInstance(typ, constructorArguments)
printfn "obj2.Number: %A" (propertyInfo.GetValue(obj2, null))

(* This code produces the following output:

obj1.Number: 42
obj1.Number: 127
obj1.MyMethod(22): 2794
obj1.Number: 5280
*)
Imports System.Reflection
Imports System.Reflection.Emit

Class DemoAssemblyBuilder

    Public Shared Sub Main()

        ' This code creates an assembly that contains one type,
        ' named "MyDynamicType", that has a private field, a property
        ' that gets and sets the private field, constructors that
        ' initialize the private field, and a method that multiplies
        ' a user-supplied number by the private field value and returns
        ' the result. The code might look like this in Visual Basic:
        '
        'Public Class MyDynamicType
        '    Private m_number As Integer
        '
        '    Public Sub New()
        '        Me.New(42)
        '    End Sub
        '
        '    Public Sub New(ByVal initNumber As Integer)
        '        m_number = initNumber
        '    End Sub
        '
        '    Public Property Number As Integer
        '        Get
        '            Return m_number
        '        End Get
        '        Set
        '            m_Number = Value
        '        End Set
        '    End Property
        '
        '    Public Function MyMethod(ByVal multiplier As Integer) As Integer
        '        Return m_Number * multiplier
        '    End Function
        'End Class
      
        Dim aName As New AssemblyName("DynamicAssemblyExample")
        Dim ab As AssemblyBuilder = _
            AssemblyBuilder.DefineDynamicAssembly( _
                aName, _
                AssemblyBuilderAccess.Run)

        ' The module name is usually the same as the assembly name.
        Dim mb As ModuleBuilder = ab.DefineDynamicModule( _
            aName.Name)
      
        Dim tb As TypeBuilder = _
            mb.DefineType("MyDynamicType", TypeAttributes.Public)

        ' Add a private field of type Integer (Int32).
        Dim fbNumber As FieldBuilder = tb.DefineField( _
            "m_number", _
            GetType(Integer), _
            FieldAttributes.Private)

        ' Define a constructor that takes an integer argument and 
        ' stores it in the private field. 
        Dim parameterTypes() As Type = { GetType(Integer) }
        Dim ctor1 As ConstructorBuilder = _
            tb.DefineConstructor( _
                MethodAttributes.Public, _
                CallingConventions.Standard, _
                parameterTypes)

        Dim ctor1IL As ILGenerator = ctor1.GetILGenerator()
        ' For a constructor, argument zero is a reference to the new
        ' instance. Push it on the stack before calling the base
        ' class constructor. Specify the default constructor of the 
        ' base class (System.Object) by passing an empty array of 
        ' types (Type.EmptyTypes) to GetConstructor.
        ctor1IL.Emit(OpCodes.Ldarg_0)
        ctor1IL.Emit(OpCodes.Call, _
            GetType(Object).GetConstructor(Type.EmptyTypes))
        ' Push the instance on the stack before pushing the argument
        ' that is to be assigned to the private field m_number.
        ctor1IL.Emit(OpCodes.Ldarg_0)
        ctor1IL.Emit(OpCodes.Ldarg_1)
        ctor1IL.Emit(OpCodes.Stfld, fbNumber)
        ctor1IL.Emit(OpCodes.Ret)

        ' Define a default constructor that supplies a default value
        ' for the private field. For parameter types, pass the empty
        ' array of types or pass Nothing.
        Dim ctor0 As ConstructorBuilder = tb.DefineConstructor( _
            MethodAttributes.Public, _
            CallingConventions.Standard, _
            Type.EmptyTypes)

        Dim ctor0IL As ILGenerator = ctor0.GetILGenerator()
        ' For a constructor, argument zero is a reference to the new
        ' instance. Push it on the stack before pushing the default
        ' value on the stack, then call constructor ctor1.
        ctor0IL.Emit(OpCodes.Ldarg_0)
        ctor0IL.Emit(OpCodes.Ldc_I4_S, 42)
        ctor0IL.Emit(OpCodes.Call, ctor1)
        ctor0IL.Emit(OpCodes.Ret)

        ' Define a property named Number that gets and sets the private 
        ' field.
        '
        ' The last argument of DefineProperty is Nothing, because the
        ' property has no parameters. (If you don't specify Nothing, you must
        ' specify an array of Type objects. For a parameterless property,
        ' use the built-in array with no elements: Type.EmptyTypes)
        Dim pbNumber As PropertyBuilder = tb.DefineProperty( _
            "Number", _
            PropertyAttributes.HasDefault, _
            GetType(Integer), _
            Nothing)
      
        ' The property Set and property Get methods require a special
        ' set of attributes.
        Dim getSetAttr As MethodAttributes = _
            MethodAttributes.Public Or MethodAttributes.SpecialName _
                Or MethodAttributes.HideBySig

        ' Define the "get" accessor method for Number. The method returns
        ' an integer and has no arguments. (Note that Nothing could be 
        ' used instead of Types.EmptyTypes)
        Dim mbNumberGetAccessor As MethodBuilder = tb.DefineMethod( _
            "get_Number", _
            getSetAttr, _
            GetType(Integer), _
            Type.EmptyTypes)
      
        Dim numberGetIL As ILGenerator = mbNumberGetAccessor.GetILGenerator()
        ' For an instance property, argument zero is the instance. Load the 
        ' instance, then load the private field and return, leaving the
        ' field value on the stack.
        numberGetIL.Emit(OpCodes.Ldarg_0)
        numberGetIL.Emit(OpCodes.Ldfld, fbNumber)
        numberGetIL.Emit(OpCodes.Ret)
        
        ' Define the "set" accessor method for Number, which has no return
        ' type and takes one argument of type Integer (Int32).
        Dim mbNumberSetAccessor As MethodBuilder = _
            tb.DefineMethod( _
                "set_Number", _
                getSetAttr, _
                Nothing, _
                New Type() { GetType(Integer) })
      
        Dim numberSetIL As ILGenerator = mbNumberSetAccessor.GetILGenerator()
        ' Load the instance and then the numeric argument, then store the
        ' argument in the field.
        numberSetIL.Emit(OpCodes.Ldarg_0)
        numberSetIL.Emit(OpCodes.Ldarg_1)
        numberSetIL.Emit(OpCodes.Stfld, fbNumber)
        numberSetIL.Emit(OpCodes.Ret)
      
        ' Last, map the "get" and "set" accessor methods to the 
        ' PropertyBuilder. The property is now complete. 
        pbNumber.SetGetMethod(mbNumberGetAccessor)
        pbNumber.SetSetMethod(mbNumberSetAccessor)

        ' Define a method that accepts an integer argument and returns
        ' the product of that integer and the private field m_number. This
        ' time, the array of parameter types is created on the fly.
        Dim meth As MethodBuilder = tb.DefineMethod( _
            "MyMethod", _
            MethodAttributes.Public, _
            GetType(Integer), _
            New Type() { GetType(Integer) })

        Dim methIL As ILGenerator = meth.GetILGenerator()
        ' To retrieve the private instance field, load the instance it
        ' belongs to (argument zero). After loading the field, load the 
        ' argument one and then multiply. Return from the method with 
        ' the return value (the product of the two numbers) on the 
        ' execution stack.
        methIL.Emit(OpCodes.Ldarg_0)
        methIL.Emit(OpCodes.Ldfld, fbNumber)
        methIL.Emit(OpCodes.Ldarg_1)
        methIL.Emit(OpCodes.Mul)
        methIL.Emit(OpCodes.Ret)

        ' Finish the type.
        Dim t As Type = tb.CreateType()

        ' Because AssemblyBuilderAccess includes Run, the code can be
        ' executed immediately. Start by getting reflection objects for
        ' the method and the property.
        Dim mi As MethodInfo = t.GetMethod("MyMethod")
        Dim pi As PropertyInfo = t.GetProperty("Number")
  
        ' Create an instance of MyDynamicType using the default 
        ' constructor. 
        Dim o1 As Object = Activator.CreateInstance(t)

        ' Display the value of the property, then change it to 127 and 
        ' display it again. Use Nothing to indicate that the property
        ' has no index.
        Console.WriteLine("o1.Number: {0}", pi.GetValue(o1, Nothing))
        pi.SetValue(o1, 127, Nothing)
        Console.WriteLine("o1.Number: {0}", pi.GetValue(o1, Nothing))

        ' Call MyMethod, passing 22, and display the return value, 22
        ' times 127. Arguments must be passed as an array, even when
        ' there is only one.
        Dim arguments() As Object = { 22 }
        Console.WriteLine("o1.MyMethod(22): {0}", _
            mi.Invoke(o1, arguments))

        ' Create an instance of MyDynamicType using the constructor
        ' that specifies m_Number. The constructor is identified by
        ' matching the types in the argument array. In this case, 
        ' the argument array is created on the fly. Display the 
        ' property value.
        Dim o2 As Object = Activator.CreateInstance(t, _
            New Object() { 5280 })
        Console.WriteLine("o2.Number: {0}", pi.GetValue(o2, Nothing))
      
    End Sub  
End Class

' This code produces the following output:
'
'o1.Number: 42
'o1.Number: 127
'o1.MyMethod(22): 2794
'o2.Number: 5280

Commenti

Per altre informazioni su questa API, vedere Osservazioni supplementari sull'API per AssemblyBuilder.

Avvertimento

AssemblyBuilder Le API richiedono un ambiente completamente attendibile con input attendibile, simile ad altre tecnologie, ad esempio i compilatori. Non sono previste restrizioni diverse dalla convalida di base per il AssemblyBuilder livello di integrità generato che può contenere. Che include la convalida per il nome del membro, il conteggio e i metadati associati, ad esempio gli attributi personalizzati.

Proprietà

Nome Descrizione
CodeBase

Ottiene la posizione dell'assembly, come specificato originariamente, ad esempio in un AssemblyName oggetto .

CodeBase

Ottiene la posizione dell'assembly come specificato originariamente, ad esempio in un AssemblyName oggetto .

(Ereditato da Assembly)
CustomAttributes

Ottiene una raccolta che contiene gli attributi personalizzati dell'assembly.

(Ereditato da Assembly)
DefinedTypes

Ottiene una raccolta dei tipi definiti in questo assembly.

(Ereditato da Assembly)
EntryPoint

Restituisce il punto di ingresso dell'assembly.

EntryPoint

Ottiene il punto di ingresso dell'assembly.

(Ereditato da Assembly)
EscapedCodeBase

Ottiene l'URI, inclusi i caratteri di escape, che rappresenta la codebase.

(Ereditato da Assembly)
Evidence

Ottiene l'evidenza per questo assembly.

Evidence

Ottiene l'evidenza per questo assembly.

(Ereditato da Assembly)
ExportedTypes

Ottiene una raccolta di tipi pubblici definiti in questo assembly visibili all'esterno dell'assembly.

(Ereditato da Assembly)
FullName

Ottiene il nome visualizzato dell'assembly dinamico corrente.

FullName

Ottiene il nome visualizzato dell'assembly.

(Ereditato da Assembly)
GlobalAssemblyCache

Ottiene un valore che indica se l'assembly è stato caricato dalla Global Assembly Cache.

GlobalAssemblyCache

Ottiene un valore che indica se l'assembly è stato caricato dalla Global Assembly Cache (solo .NET Framework).

(Ereditato da Assembly)
HostContext

Ottiene il contesto host in cui viene creato l'assembly dinamico.

HostContext

Ottiene il contesto host con cui è stato caricato l'assembly.

(Ereditato da Assembly)
ImageRuntimeVersion

Ottiene la versione di Common Language Runtime che verrà salvata nel file contenente il manifesto.

ImageRuntimeVersion

Ottiene una stringa che rappresenta la versione di Common Language Runtime (CLR) salvata nel file contenente il manifesto.

(Ereditato da Assembly)
IsDynamic

Ottiene un valore che indica che l'assembly corrente è un assembly dinamico.

IsFullyTrusted

Ottiene un valore che indica se l'assembly corrente viene caricato con attendibilità totale.

(Ereditato da Assembly)
Location

Ottiene il percorso, in formato codebase, del file caricato che contiene il manifesto se non viene copiato tramite shadow.

Location

Ottiene il percorso completo o il percorso UNC del file caricato che contiene il manifesto.

(Ereditato da Assembly)
ManifestModule

Ottiene il modulo nell'oggetto corrente AssemblyBuilder che contiene il manifesto dell'assembly.

ManifestModule

Ottiene il modulo che contiene il manifesto per l'assembly corrente.

(Ereditato da Assembly)
Modules

Ottiene una raccolta che contiene i moduli in questo assembly.

(Ereditato da Assembly)
PermissionSet

Ottiene il set di concessioni dell'assembly dinamico corrente.

ReflectionOnly

Ottiene un valore che indica se l'assembly dinamico si trova nel contesto di sola reflection.

ReflectionOnly

Ottiene un Boolean valore che indica se l'assembly è stato caricato nel contesto di sola reflection.

(Ereditato da Assembly)
SecurityRuleSet

Ottiene un valore che indica il set di regole di sicurezza applicate da Common Language Runtime (CLR) per questo assembly.

SecurityRuleSet

Ottiene un valore che indica il set di regole di sicurezza applicate da Common Language Runtime (CLR) per questo assembly.

(Ereditato da Assembly)

Metodi

Nome Descrizione
AddResourceFile(String, String, ResourceAttributes)

Aggiunge un file di risorse esistente a questo assembly.

AddResourceFile(String, String)

Aggiunge un file di risorse esistente a questo assembly.

CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, con la ricerca facoltativa con distinzione tra maiuscole e minuscole e con le impostazioni cultura, gli argomenti e gli attributi di associazione e attivazione specificati.

(Ereditato da Assembly)
CreateInstance(String, Boolean)

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, con la ricerca facoltativa con distinzione tra maiuscole e minuscole.

(Ereditato da Assembly)
CreateInstance(String)

Individua il tipo specificato da questo assembly e ne crea un'istanza usando l'attivatore di sistema, usando la ricerca con distinzione tra maiuscole e minuscole.

(Ereditato da Assembly)
DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)

Definisce un assembly dinamico con il nome, i diritti di accesso e gli attributi specificati.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)

Definisce un assembly dinamico con il nome e i diritti di accesso specificati.

DefineDynamicModule(String, Boolean)

Definisce un modulo dinamico temporaneo denominato in questo assembly e specifica se le informazioni sui simboli devono essere generate.

DefineDynamicModule(String, String, Boolean)

Definisce un modulo dinamico persistente, specificando il nome del modulo, il nome del file in cui verrà salvato il modulo e se le informazioni sui simboli devono essere generate usando il writer di simboli predefinito.

DefineDynamicModule(String, String)

Definisce un modulo dinamico persistente con il nome specificato che verrà salvato nel file specificato. Non vengono generate informazioni sui simboli.

DefineDynamicModule(String)

Definisce un modulo dinamico temporaneo denominato in questo assembly.

DefineResource(String, String, String, ResourceAttributes)

Definisce una risorsa gestita autonoma per questo assembly. Gli attributi possono essere specificati per la risorsa gestita.

DefineResource(String, String, String)

Definisce una risorsa gestita autonoma per questo assembly con l'attributo di risorsa pubblica predefinito.

DefineUnmanagedResource(Byte[])

Definisce una risorsa non gestita per questo assembly come BLOB opaco di byte.

DefineUnmanagedResource(String)

Definisce un file di risorse non gestito per questo assembly in base al nome del file di risorse.

DefineVersionInfoResource()

Definisce una risorsa di informazioni sulla versione non gestita utilizzando le informazioni specificate nell'oggetto AssemblyName dell'assembly e negli attributi personalizzati dell'assembly.

DefineVersionInfoResource(String, String, String, String, String)

Definisce una risorsa di informazioni sulla versione non gestita per questo assembly con le specifiche specificate.

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale all'oggetto specificato.

Equals(Object)

Determina se questo assembly e l'oggetto specificato sono uguali.

(Ereditato da Assembly)
GetCustomAttributes(Boolean)

Restituisce tutti gli attributi personalizzati applicati all'oggetto corrente AssemblyBuilder.

GetCustomAttributes(Boolean)

Ottiene tutti gli attributi personalizzati per questo assembly.

(Ereditato da Assembly)
GetCustomAttributes(Type, Boolean)

Restituisce tutti gli attributi personalizzati applicati all'oggetto corrente AssemblyBuildere che derivano da un tipo di attributo specificato.

GetCustomAttributes(Type, Boolean)

Ottiene gli attributi personalizzati per questo assembly come specificato dal tipo.

(Ereditato da Assembly)
GetCustomAttributesData()

Restituisce CustomAttributeData oggetti che contengono informazioni sugli attributi applicati all'oggetto corrente AssemblyBuilder.

GetCustomAttributesData()

Restituisce informazioni sugli attributi applicati all'oggetto corrente Assembly, espresso come CustomAttributeData oggetti .

(Ereditato da Assembly)
GetDynamicModule(String)

Restituisce il modulo dinamico con il nome specificato.

GetExportedTypes()

Ottiene i tipi esportati definiti in questo assembly.

GetExportedTypes()

Ottiene i tipi pubblici definiti in questo assembly visibili all'esterno dell'assembly.

(Ereditato da Assembly)
GetFile(String)

Ottiene un FileStream oggetto per il file specificato nella tabella file del manifesto dell'assembly.

GetFile(String)

Ottiene un FileStream oggetto per il file specificato nella tabella file del manifesto dell'assembly.

(Ereditato da Assembly)
GetFiles()

Ottiene i file nella tabella file di un manifesto dell'assembly.

(Ereditato da Assembly)
GetFiles(Boolean)

Ottiene i file nella tabella file di un manifesto dell'assembly, specificando se includere i moduli delle risorse.

GetFiles(Boolean)

Ottiene i file nella tabella file di un manifesto dell'assembly, specificando se includere i moduli delle risorse.

(Ereditato da Assembly)
GetForwardedTypes()

Definisce e rappresenta un assembly dinamico.

(Ereditato da Assembly)
GetHashCode()

Restituisce il codice hash per questa istanza.

GetHashCode()

Restituisce il codice hash per questa istanza.

(Ereditato da Assembly)
GetLoadedModules()

Ottiene tutti i moduli caricati che fanno parte di questo assembly.

(Ereditato da Assembly)
GetLoadedModules(Boolean)

Restituisce tutti i moduli caricati che fanno parte di questo assembly e, facoltativamente, include i moduli delle risorse.

GetLoadedModules(Boolean)

Ottiene tutti i moduli caricati che fanno parte di questo assembly, specificando se includere moduli di risorse.

(Ereditato da Assembly)
GetManifestResourceInfo(String)

Restituisce informazioni sulla modalità di persistenza della risorsa specificata.

GetManifestResourceNames()

Carica la risorsa manifesto specificata da questo assembly.

GetManifestResourceStream(String)

Carica la risorsa manifesto specificata da questo assembly.

GetManifestResourceStream(Type, String)

Carica la risorsa manifesto specificata, con ambito dallo spazio dei nomi del tipo specificato, da questo assembly.

GetManifestResourceStream(Type, String)

Carica la risorsa manifesto specificata, con ambito dallo spazio dei nomi del tipo specificato, da questo assembly.

(Ereditato da Assembly)
GetModule(String)

Ottiene il modulo specificato in questo assembly.

GetModule(String)

Ottiene il modulo specificato in questo assembly.

(Ereditato da Assembly)
GetModules()

Ottiene tutti i moduli che fanno parte di questo assembly.

(Ereditato da Assembly)
GetModules(Boolean)

Ottiene tutti i moduli che fanno parte di questo assembly e, facoltativamente, include i moduli delle risorse.

GetModules(Boolean)

Ottiene tutti i moduli che fanno parte di questo assembly, specificando se includere moduli di risorse.

(Ereditato da Assembly)
GetName()

Ottiene un oggetto per l'assembly AssemblyName .

(Ereditato da Assembly)
GetName(Boolean)

Ottiene l'oggetto AssemblyName specificato al momento della creazione dell'assembly dinamico corrente e imposta la codebase come specificato.

GetName(Boolean)

Ottiene un oggetto AssemblyName per questo assembly, impostando la codebase come specificato da copiedName.

(Ereditato da Assembly)
GetObjectData(SerializationInfo, StreamingContext)

Ottiene le informazioni di serializzazione con tutti i dati necessari per reinstantiare questo assembly.

(Ereditato da Assembly)
GetReferencedAssemblies()

Ottiene un elenco incompleto di AssemblyName oggetti per gli assembly a cui fa riferimento questo AssemblyBuilderoggetto .

GetReferencedAssemblies()

Ottiene gli AssemblyName oggetti per tutti gli assembly a cui fa riferimento questo assembly.

(Ereditato da Assembly)
GetSatelliteAssembly(CultureInfo, Version)

Ottiene la versione specificata dell'assembly satellite per le impostazioni cultura specificate.

GetSatelliteAssembly(CultureInfo, Version)

Ottiene la versione specificata dell'assembly satellite per le impostazioni cultura specificate.

(Ereditato da Assembly)
GetSatelliteAssembly(CultureInfo)

Ottiene l'assembly satellite per le impostazioni cultura specificate.

GetSatelliteAssembly(CultureInfo)

Ottiene l'assembly satellite per le impostazioni cultura specificate.

(Ereditato da Assembly)
GetType()

Definisce e rappresenta un assembly dinamico.

(Ereditato da Assembly)
GetType(String, Boolean, Boolean)

Ottiene il tipo specificato dai tipi definiti e creati nell'oggetto corrente AssemblyBuilder.

GetType(String, Boolean, Boolean)

Ottiene l'oggetto Type con il nome specificato nell'istanza dell'assembly, con le opzioni di ignorare il caso e di generare un'eccezione se il tipo non viene trovato.

(Ereditato da Assembly)
GetType(String, Boolean)

Ottiene l'oggetto Type con il nome specificato nell'istanza dell'assembly e, facoltativamente, genera un'eccezione se il tipo non viene trovato.

(Ereditato da Assembly)
GetType(String)

Ottiene l'oggetto Type con il nome specificato nell'istanza dell'assembly.

(Ereditato da Assembly)
GetTypes()

Ottiene tutti i tipi definiti in questo assembly.

(Ereditato da Assembly)
IsDefined(Type, Boolean)

Restituisce un valore che indica se una o più istanze del tipo di attributo specificato vengono applicate a questo membro.

IsDefined(Type, Boolean)

Indica se all'assembly è stato applicato o meno un attributo specificato.

(Ereditato da Assembly)
LoadModule(String, Byte[], Byte[])

Carica il modulo, interno a questo assembly, con un'immagine basata su COFF (Common Object File Format) contenente un modulo generato o un file di risorse. Vengono caricati anche i byte non elaborati che rappresentano i simboli per il modulo.

(Ereditato da Assembly)
LoadModule(String, Byte[])

Carica il modulo, interno a questo assembly, con un'immagine basata su COFF (Common Object File Format) contenente un modulo generato o un file di risorse.

(Ereditato da Assembly)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
Save(String, PortableExecutableKinds, ImageFileMachine)

Salva questo assembly dinamico su disco, specificando la natura del codice negli eseguibili dell'assembly e nella piattaforma di destinazione.

Save(String)

Salva questo assembly dinamico su disco.

SetCustomAttribute(ConstructorInfo, Byte[])

Impostare un attributo personalizzato in questo assembly usando un BLOB di attributi personalizzato specificato.

SetCustomAttribute(CustomAttributeBuilder)

Impostare un attributo personalizzato in questo assembly usando un generatore di attributi personalizzato.

SetEntryPoint(MethodInfo, PEFileKinds)

Imposta il punto di ingresso per questo assembly e definisce il tipo dell'eseguibile portabile (file PE) da compilare.

SetEntryPoint(MethodInfo)

Imposta il punto di ingresso per questo assembly dinamico, presupponendo che venga compilata un'applicazione console.

ToString()

Restituisce il nome completo dell'assembly, noto anche come nome visualizzato.

(Ereditato da Assembly)

Eventi

Nome Descrizione
ModuleResolve

Si verifica quando il caricatore di classi Common Language Runtime non è in grado di risolvere un riferimento a un modulo interno di un assembly tramite mezzi normali.

(Ereditato da Assembly)

Implementazioni dell'interfaccia esplicita

Nome Descrizione
_Assembly.GetType()

Restituisce il tipo dell'istanza corrente.

(Ereditato da Assembly)
_AssemblyBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Esegue il mapping di un set di nomi a un set corrispondente di identificatori dispatch.

_AssemblyBuilder.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto che può quindi essere usato per ottenere informazioni sul tipo relative a un'interfaccia.

_AssemblyBuilder.GetTypeInfoCount(UInt32)

Recupera il numero di interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

_AssemblyBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso alle proprietà e ai metodi esposti da un oggetto .

Metodi di estensione

Nome Descrizione
GetCustomAttribute(Assembly, Type)

Recupera un attributo personalizzato di un tipo specificato applicato a un assembly specificato.

GetCustomAttribute<T>(Assembly)

Recupera un attributo personalizzato di un tipo specificato applicato a un assembly specificato.

GetCustomAttributes(Assembly, Type)

Recupera una raccolta di attributi personalizzati di un tipo specificato applicato a un assembly specificato.

GetCustomAttributes(Assembly)

Recupera una raccolta di attributi personalizzati applicati a un assembly specificato.

GetCustomAttributes<T>(Assembly)

Recupera una raccolta di attributi personalizzati di un tipo specificato applicato a un assembly specificato.

IsDefined(Assembly, Type)

Indica se gli attributi personalizzati di un tipo specificato vengono applicati a un assembly specificato.

Si applica a

Vedi anche