相关文章推荐
斯文的大象  ·  android - How to set ...·  10 月前    · 
谈吐大方的铁链  ·  gridview ...·  1 年前    · 
细心的仙人球  ·  upload multiple files ...·  1 年前    · 

分两种情况:

1、需要加载的程序集已经在程序中被引用了,则直接从当前程序域中查找即可:

Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.GetName().Name.Contains("theAssemblyName"));

2、需要加载的程序集未被加载,则使用程序集名称加载:

方法一,需要具体程序集的一些必要信息,如下:

Assembly assembly = Assembly.Load(@"theAssemblyName, Version=55.0.0.0, Culture=neutral, PublicKeyToken=ef0f902af9dee505");

说明:theAssemblyName:为程序集的名称,Version:为程序集的版本,Culture:一般默认使用neutral,PublicKeyToken:为程序集的唯一标识ID,没有;上述信息可以在程序集项目中 AssemblyInfo.cs文件中获取,如下图:

方法二,通过程序集文件路径加载,只加载程序集文件,不加载程序集依赖的其它程序集,如下:

Assembly assembly = Assembly.LoadFile(具体路径+ "DynamicReferenceDLL.dll")

方法三,通过程序集文件路径加载,同时将此程序集所依赖的程序集也加载进来,如下:

Assembly assembly = Assembly.LoadFrom(具体路径+ "DynamicReferenceDLL.dll")

使用反射创建实例:

 //获取程序集中指定的类类型,参数为:命名空间.类型名
 var type = assembly.GetType("DynamicReferenceDLL.MyMath");
 //创建实例,方法一
 //var obj = Activator.CreateInstance(type); 
 //创建实例,方法二  ,参数为:命名空间.类型名    
 var obj = assembly.CreateInstance("DynamicReferenceDLL.MyMath");
 //获取实例中的方法
 var method = type.GetMethod("Sum");
 //调用实例方法
 object result=method.Invoke(obj, new object[] { 1, 2 });
 Console.WriteLine(result);

如何获取程序集的文件的 PublicKeyToken,Culture,Version

Assembly assembly = Assembly.LoadFile(@"C:\Program Files\ReferencedAssemblies\theAssemblyName.dll");
string name = assembly.FullName;
                    Assembly动态加载程序集:分两种情况:1、需要加载的程序集已经在程序中被引用了,则直接从当前程序域中查找即可:Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.GetName().Name.Contains("theAssemblyName"));2、需要加载的程序集未被加载,则使用程序集名称加载:方法一,需要具体程序集的一些必要信息,如下:Ass..
2.没有权限的时候
.net自带的一个工具可以将dll注册到GAC中去的,gacutil.exe。
开始菜单-Microsoft Visual Studio 2010 -Visual Studio Tools-Visual Studio 命令提示(2008),在控制台中输入 gacutil.exe 回车,既可以看到一些参数。
要安装dll到GAC中的话选择-i参数
            Assembly assembly1 = Assembly.LoadFile("程序路径,不能是相对路径");
            //无参构造函数
            object objNoParam = assembly1.CreateInstance("命名空间.具体类型");
            assembly1.C.
    public class DoNetDllClass
        public UInt32 SeedAndKeyFunc(UInt32 level, UInt32 len, byte[] seed, byte[] key)
        	key[0] = 0x11;
        	key[1] = 0x11;
				
反射常常与接口、依赖反转原则一起使用反射事实上是.Net框架的内容,不是C#语言的内容。 对于托管类语言,反射很重要。单元测试、依赖注入、泛型编程,都基于反射机制。 反射的实质其实就是:给我一个对象,我能在不知道它是什么静态类型,且不使用new操作符的情况下,再创建出一个与它同类型的新对象,并且能够访问其方法。 从定义来看,反射有两方面好处。 一方面,我们知道,使用new操作符,即是创造了一个紧耦合,直接地将所在类与new后的静态类型紧耦合在了一起。而使用反射,直接避免紧耦合的发生,降低了耦合度。
简记个人博客网站源码为博主现有博客网站,前端采用LayUI框架,此分享版本为asp + access。所有功能齐全,欢迎使用使用方法:上传至空间或服务器,通过IIS发布网站即可。 演示地址:https://shenco.wang/show_1427.html 1、本博客前后台融合,通过账号权限控制。 2、普通账号可以通过注册登陆,管理员授权后可发布文章。 3、管理员登陆地址隐藏在归档-登陆上,点击管理员输入密码(gggaiitx)即可登陆。
1.返回指定目录中与指定搜索模式匹配的文件名称 string[] allDll = Directory.GetFiles(“C:\新文件夹或者直接写文件名字”, “*.dll”); 2.已知程序的文件名或路径,加载程序 Assembly assembly = Assembly.LoadFrom(allDll[i]); 3.GetExportedTypes:获取此程序的公共类型,这些公共类型在程序外可见 4.assembly.GetExportedTypes():只获取那些public的类型
将下列文字整理成表格:使⽤print、whatis命令\nprint 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,⽐如当前正在调试C语⾔的程序,那么“表达\n式”可以是任何C语⾔的有效表达式,包括数字,变量甚⾄是函数调⽤。\nprint a:将显⽰整数 a 的值\nprint ++a:将把 a 中的值加1,并显⽰出来\nprint name:将显⽰字符串 name 的值\nprint gdb_test(22):将以整数22作为参数调⽤ gdb_test() 函数\nprint gdb_test(a):将以变量 a 作为参数调⽤ gdb_test() 函数\ndisplay 表达式:在单步运⾏时将⾮常有⽤,使⽤display命令设置⼀个表达式后,它将在每次单步进⾏指令后,紧接着输出被设置的表\n达式及值。如: display a\nwatch 表达式:设置⼀个监视点,⼀旦被监视的“表达式”的值改变,gdb将强⾏终⽌正在被调试的程序。如: watch a\nwhatis :查询变量或函数\ninfo function: 查询函数\ninfo locals: 显⽰当前堆栈页的所有变量\ncall 函数(参数):调⽤程序中可见的函数,并传递“参数”,如:call gdb_test(55);
命令 | 描述 ------------ | ------------- print 表达式 | 简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,如当前正在调试C语言的程序 print a | 将显示整数 a 的值 print ++a | 将把 a 中的值加1,并显示出来 print name | 将显示字符串 name 的值 print gdb_test(22) | 将以整数22作为参数调用 gdb_test() 函数 print gdb_test(a) | 将以变量 a 作为参数调用 gdb_test() 函数 display 表达式 | 在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值 watch 表达式 | 设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序 whatis | 查询变量或函数 info function | 查询函数 info locals | 显示当前堆栈页的所有变量 call 函数(参数) | 调用程序中可见的函数,并传递“参数”