.NET 程序集Assembly使用】的更多相关文章

概述 一直以来,我们都在用C#编写程序,编写程序的时候,我们用到继承.多态.接口以及泛型,我们也都明白子类可以继承抽象类,并能够重写父类的抽象方法,可是大家是否想过,如下几个问题: 1.凡树必有根和叶,类的继承也如此,如何通过程序集查找所有继承父类的之类的程序集名称? 2.如果程序B被其他程序调用,如何通过程序集查询调用B的所有程序? 3.如何查询当前项目通过添加引用了哪些程序集? 带上上面的三个问题,我们来学习下.NET 程序集 Assembly. 查询继承父类的程序集合BaseType .N…
前言 一直都用集成开发坏境(IDE),一直对模块和程序集的概念理解的不是很直观,因为一Build就把你的单个模块塞进程序集里面去了.当然,对你的编程也不会造成太大的影响.但有些东西你最好还是知道比较好,而且对安装部署你的应用程序一定条件下有帮助. 首先我们先来认识下托管模块(Managed Module).PE头+CLR头+元数据metadata+IL.想必关于这个结构应该不会很陌生.还是费点笔墨介绍一下: 1, PE头,这是标准的window PE头吧,顺序结构的,是否是32位的,是CUI还是…
原谅我到目前为止一直肤浅的认为程序集就是dll,这种想法是错误的. 今天就系统的学习记录一下“程序集”的概念.原文链接https://www.cnblogs.com/czx1/p/201413137070-com.html 程序集包含了两种文件:可执行文件(.exe文件)和 类库文件(.dll文件). 在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集. 应用程序结构:包含 应用程序域(AppDomain),程序集(Assembly),模块(Module),类型(Type)…
①什么是程序集?可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件.嗯,这个确实简单了些,但我是这么理解的.详细:http://blog.csdn.net/sws8327/archive/2006/09/21/1244642.aspx ②程序集和命名空间的区别?一个程序集可以跨越n个命名空间,一个命名空间也可以包含n个程序集.(估计你该晕了) 如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式.只有同时指定类型所在的命名空间及实现该类型的程序集,才能…
上篇我讲了下我对Assembly的初步认知.现在来说说怎么使用已有的Assembly.比如说我在做一个解决方案时,发现你做的解决方案的某个项目中的类的方法(功能)我正好可以用到,哈,那我就不用写类了,直接考过来,不是考代码文件,而是考的那个需要的项目的Assembly....我现在就来解决这个问题. [过程]①打开解决方案,在[解决方案资源管理器]的项目上单击右键,选择[添加引用],弹出[添加引用]对话框,单击[浏览],找到并选定刚刚从你那Copy过来的Assembly,(假设为:ClassLi…
程序集 程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件.程序集只是逻辑上的划分,一个程序集可以只由一个文件组成,也可由多个文件组成.不管是单文件程序集还是多文件程序集,它们都由固定的结构组成 常见的两种程序集: 可执行文件(.exe文件)和 类库文件(.dll文件). 在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集. 应用程序结构: 包含 应用程序域(AppDomain),程序集(Assembly),模块(Module),类型(Typ…
自动加载程序集,解析程序集中的方法. private static object Invoke(string lpFileName, string Namespace, string ClassName, string lpProcName, object[] ObjArray_Parameter) { try { // 载入程序集 Assembly MyAssembly = Assembly.LoadFrom(lpFileName); Type[] type = MyAssembly.GetT…
首先我们来看程序集,程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件(例如可执行文件.exe和类库文件.dll).由于程序集在编译后并不一定会生成单个文件,而可能会生成多个物理文件,甚至可能会生成分布在不同位置的多个物理文件,所以程序集是一个逻辑单元,而不是一个物理单元.即程序集在逻辑上是一个编译单元,但在物理储存上可以有多种存在形式.对于静态程序集可以生成单个或多个文件,而动态程序集是存在于内存中的.在C#中程序集处处可见,因为任何基于.NET的代码在编译时都…
程序集 程序集(assembly)是一个或多个托管模块,以及一些资源文件的逻辑组合. 组成部分 Windows文件首部 CLR文件首部 程序集清单 类型元数据 MSIL(CIL)代码 嵌入资源集 作用 代码重用 确定类型边界 可版本化的单元 自描述的 可配置的 命名空间 一个程序集内相关类型的一个分组,一个程序集可以包含任意个命名空间,每个命名空间又可以包含多种类型. 根命名空间 System Microsoft 解决命名冲突 使用完全限定名 使用别名 嵌套命名空间 namespace A{ …
一:认识程序集       只要是使用VS就会和程序集打交道,我们通过编辑和生产可执行程序就会自动生成程序集.那么什么事程序集呢,.net中的dll与exe文件的都是程序集(Assembly).       可以看做是一堆相关类打包的包,相当于java中的jar包(*);       程序集包含:类型元数据,程序集元数据,IL代码,资源文件       类型元数据:描述在代码中定义的每一类型和成员的二进制形式.       程序集元数据:程序集清单,版本号,名称等:       IL代码:被微软…
#1 加载程序集 Assembly.Load: public class Assembly { public static Assembly Load(AssemblyName assemblyRef); public static Assembly Load(String assemblyString); } 在内部,Load导致CLR向应用程序集应用一个版本绑定重定向策略,并在GAC中查找程序集.如果传递的是一个弱命名程序集,不会应用版本绑定重定向策略,也不会去GAC中查找程序集. AppD…
反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性.字段),而不去使用Invoke方法)   创建Delegate (1).Delegate.CreateDelegate(Type, MethodInfo) : 创建指定类型的静态方法,      1.Type(委托类型)     2.MethodInfo(要创建的静态方法的信息,通过类的type.GetMethod( funcName , BindingFlags.IgnoreCase | BindingFlags.Static…
1. 概述 本章将介绍 什么是程序集.如何强命名程序集.如何把程序集放入GAC.程序集版本 以及 WinMD程序集. 2. 主要内容 2.1 什么是程序集 程序集(Assembly)概念的出现,是为了解决COM时代的各种问题的. ① 程序集是自包含的.不需要写入注册表或其他位置. ② 程序集是语言无关的.由中间语言组成,可以被.net支持的各种语言编写的程序使用. ③ 程序集支持多个版本. ④ 程序集支持简单拷贝的发布方式. 2.2 强命名程序集 CLR支持两种类型的程序集:强命名程序集 和 常…
什么是Assembly(程序集)?Assembly是一个包含来程序的名称,版本号,自我描述,文件关联关系和文件位置等信息的一个集合.在.net框架中通过Assembly类来支持,该类位于System.Reflection下,物理位置位于:mscorlib.dll. Assembly能干什么?我们可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息. 一个简单的演示实例:1.建立一个Console工程名为:NamespaceRef2.写入如下代码: 1using System;2…
---------------------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------------------- 一.委托 =====================================   1//定义一个委托 // 1.使用delegate关键字 //2. 这个委托要存储的方法如果没有返回值, 那么委托也要定义成void. //如果没有参数,那么将来传递的方法也不能有参数.  委托是一个数据类型,用的时候需要传递一个变量  ---…
延迟加载是一个很大的诱惑,可以达到一些比较好的效果,比如: 1.在实体框架中,由于关联数据的数量和使用时机是不确定的,通过延迟加载,仅在使用的时候去执行关联数据的查询操作,减少无谓的数据查询操作,可以降低单次数据查询执行的时间,提升系统的性能. 2.在一个插件平台中启动平台时只加载必需的程序集,当执行到具体插件时再加载插件相关的程序集,仅在需要的时候加载资源,可以减少插件平台的启动时间,使内存的占用更合理些. 延迟加载可以使资源的占用更加合理,并提升一定的性能,当然也有一些例子来说明延迟加载的坏…
System.Reflection.Assembly类是一个比较常用到的类,在反射中就经常用到. 由于这个类实在有太多的字段.属性与方法.实在不想将一个个属性方法从MSDN复制出来然后逐个属性.方法敲一次,我想改变一下学习方法,从实际运用学习. 一.加载程序集并执行方法 使用反射加载程序集并执行方法,加载程序集主要使用LoadFrom()方法. static void Main(string[] args) { Assembly ass = Assembly.LoadFrom(@"D:\test…
程序结构: //获取程序集 Assembly asb = Assembly.LoadFrom(path);//path为程序集的物理路径 //获取程序集下面的Student类 Type document = asb.GetType("DAL.Student");//参数必须是命名空间+类名,否则会报错. //实例化Document类对象(有参数的话需要传递object参数) object docObj = Activator.CreateInstance(document); //获取…
我们知道反射是 依赖注入 模式的基础,依赖注入要求只在项目中引用定义接口的程序集,而不引用接口实现类的程序集,因为接口实现类的程序集应该是通过反射来动态加载的,这样才能保证接口与其实现类之间的松耦合.可是有时候我们使用反射动态加载程序集的时候会失败,因为除非我们手动将接口实现类的程序集放在项目生成后的bin目录下,或者是在GAC中,否者.Net Framework并不知道该到哪里去寻找接口实现类的dll程序集文件.幸运的是我们如果使用 AppDomain.CurrentDomain.Assemb…
一.什么是程序集(Assembly)? 经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为·dll或者是·exe的格式,但是要注意,它们跟普通意义上的WIN32可执行程序是完全不同的东西,程序集必须依靠CLR才能顺利执行. ----百度百科之程序集 程序集可分为两种类型: (1).可执行程序,后缀为.exe(GUI,图形用户接口:或CUI,命令行用户接口) (2).类库,后缀为.dll 其结构如下图: 在其构成中,只有PE头.CLR头.清单是必须的.…
反射Demo: public class Person { public int Age; public void SayHello() { Console.WriteLine("Hello Person"); } } class Program { static void Main(string[] args) { //把程序集像读取文件一样读取出来,动态的调用程序集里面的方法 Person p = new Person(); /* * 使用Type描述类型特征 Type t1=ty…
System.Reflection.Assembly类是一个比较常用到的类,在反射中就经常用到. 由于这个类实在有太多的字段.属性与方法.实在不想将一个个属性方法从MSDN复制出来然后逐个属性.方法敲一次,我想改变一下学习方法,从实际运用学习. 一.加载程序集并执行方法 使用反射加载程序集并执行方法,加载程序集主要使用LoadFrom()方法. static void Main(string[] args) { Assembly ass = Assembly.LoadFrom(@"D:\test…
CLR在加载程序集的时候会查看程序集清单,程序集清单包含哪些内容呢?可执行文件和程序集有什么区别/ 程序集清单 □ 查看程序集清单 →清空F盘as文件夹中的所有内容→创建MainClass.cs文件→把MainClass.cs编译成程序集→反编译MyDll.dll,在1.txt文件中呈现 ildasm /out:1.txt MyDll.dll →打开1.txt文件 1.txt // Metadata version: v4.0.30319 .assembly extern mscorlib {…
本篇在一个程序集包含多个module的场景下体验internal的含义. →查看F盘as文件夹下的文件→删除MainClass.exe→把MyFirstModule和MySecondModule组装到一个程序集中去现在,MyDll.dll程序集中包含了2个module.→反编译,把MyDLL.dll的IL代码显示到3.txt文件中→打开3.txt文件 // Metadata version: v4.0.30319 .assembly extern mscorlib { .publickeytok…
继续上一篇"C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序",在F盘的as文件夹中已经有了若干程序集.本篇体验使用记事本查看可执行程序集的IL代码. →打开"VS2012开发人员命令提示",输入如下命令,并按回车在as文件夹中多了1.txt和1.res这2个文件→输入如下命令打开1.txt // Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.18020…
protected static void test() { //获取程序集 Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();//Assembly.LoadFrom("test.dll"); //获取模块 Module[] modules = assembly.GetModules(); foreach (Module module in modules) { Console.WriteLine…
一. 程序集的加载: 在CLR内部使用System.Reflection.Assembly类的静态LoadFrom方法尝试加载程序集. LoadFrom方法在内部调用Assembly的Load方法,将AssemblyName对象传给它,然后CLR应用版本绑定从定向策略,并在各个位置查询匹配的程序集.Load找到匹配的程序集就会加载它.如果Load没有找到匹配的程序集,LoadFrom会通过LoadFrom的实参传递的路劲中的程序集. //LoadFrom 根据已知的程序集路径加载程序集 Asse…
我们知道反射是 依赖注入 模式的基础,依赖注入要求只在项目中引用定义接口的程序集,而不引用接口实现类的程序集,因为接口实现类的程序集应该是通过反射来动态加载的,这样才能保证接口与其实现类之间的松耦合.可是有时候我们使用反射动态加载程序集的时候会失败,因为除非我们手动将接口实现类的程序集放在项目生成后的bin目录下,或者是在GAC中,否者.Net Framework/.Net Core并不知道该到哪里去寻找接口实现类的dll程序集文件.幸运的是我们如果使用 AppDomain.CurrentDom…
新建一个类库: SelfHost: 方法一: 1.添加对MyControllers类库的引用. 2.在控制台代码中加入一行代码: 当然,可以添加多个程序集.(记得引用) var config = new HttpSelfHostConfiguration("http://localhost:9527"); config.Routes.MapHttpRoute( "API Default", "api/{controller}/{action}/{id}&q…
什么是元数据,什么是反射: 程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BLC中的类)这些也是数据. 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程序集中. 程序在运行时,可以查看其它程序集或其本身的元数据.一个运行的程序查看本身的元数据或者其他程序集的元数据的行为叫做反射. 下面我们我们来学习如何使用Type类来反射数据,以及如何使用特性来给类型添加元数据. Type位于System.Reflection命名空间下 Type类 预定义类型(i…