首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从动态生成的程序集中引用GAC程序集?

从动态生成的程序集中引用GAC程序集需要以下步骤:

  1. 创建一个新的程序集:
代码语言:csharp
复制
AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(
    new AssemblyName("MyDynamicAssembly"),
    AssemblyBuilderAccess.RunAndSave);
  1. 创建一个模块:
代码语言:csharp
复制
ModuleBuilder mb = ab.DefineDynamicModule("MyDynamicModule", "MyDynamicAssembly.dll");
  1. 创建一个类型:
代码语言:csharp
复制
TypeBuilder tb = mb.DefineType("MyDynamicType", TypeAttributes.Public);
  1. 创建一个方法:
代码语言:csharp
复制
MethodBuilder methBuilder = tb.DefineMethod("MyDynamicMethod",
    MethodAttributes.Public | MethodAttributes.Static,
    typeof(void),
    Type.EmptyTypes);
  1. 使用ILGenerator生成方法体:
代码语言:csharp
复制
ILGenerator il = methBuilder.GetILGenerator();
  1. 在ILGenerator中,使用Emit方法引用GAC程序集中的类型:
代码语言:csharp
复制
Type gacType = Type.GetType("GacAssembly.MyNamespace.MyType, GacAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<your_public_key_token>");
il.Emit(OpCodes.Ldnull);
il.Emit(OpCodes.Call, gacType.GetMethod("MyMethod"));
il.Emit(OpCodes.Ret);
  1. 完成类型和程序集的定义:
代码语言:csharp
复制
Type dynamicType = tb.CreateType();
ab.Save("MyDynamicAssembly.dll");
  1. 最后,在你的应用程序中引用生成的程序集,并调用MyDynamicMethod方法:
代码语言:csharp
复制
Assembly.LoadFrom("MyDynamicAssembly.dll").GetType("MyDynamicType").GetMethod("MyDynamicMethod").Invoke(null, null);

这样,你就可以从动态生成的程序集中引用GAC程序集了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券