【CLR Via C#】2 程序集】的更多相关文章

C#开发者在开发WinForm程序.Asp.Net Web(MVC)程序等,不可避免的在项目中引用许多第三方的DLL程序集, 编译后引用的dll都放在根目录下.以我个人作品 AutoProject Studio 自动化项目生成器 为例,由于需要支持SQL Server. Oracle.MySQL.PostgreSQL.DB2.Sybase.Infomix.SQLite.Access等多种数据库,所以引用了DmProvider.dll. IBM.Data.DB2.dll.IBM.Data.Info…
在前一篇文章<CLR查找和加载程序集的方式(一)>中详细介绍了CLR查找和加载程序的方式,分别介绍了配置与代码的实现方式. 本篇通过一个具体的流程图来帮助大家更加直观明了深入的掌握CLR查找DLL程序集的方式. 说明: (1) 初始化绑定:从元数据中取出相关的AssemblyRef记录,并查看其中包括什么内容--它的外部程序集名称,它是否经过强命名,是否指定了文化等. (2) 应用版本策略:这是一些由应用程序.被引用的共享程序集发布者或管理员生成的语句.这些语句包含在XML配置文件中,并且只是…
C#开发者在开发WinForm程序.Asp.Net Web(MVC)程序等,不可避免的在项目中引用许多第三方的DLL程序集, 编译后引用的dll都放在根目录下.以我个人作品 AutoProject Studio 自动化项目生成器 为例,由于需要支持SQL Server. Oracle.MySQL.PostgreSQL.DB2.Sybase.Infomix.SQLite.Access等多种数据库,所以引用了DmProvider.dll. IBM.Data.DB2.dll.IBM.Data.Info…
在项目的配置文件Web.config中,会看到<runtime>节点,以及包含在其中的<assemblyBinding>节点,这显然与程序集有关,这些节点到底何时被用到呢? 在默认情况下,在运行时,JIT编译器将IL代码编译成本地代码时,会查看IL代码中的字段.局部变量.方法参数等引用了哪些类型,然后借助程序集的TypeRef和AssemblyRef元数据,内部使用System.Reflection.Assembly的Load方法来确定需要被加载的程序集,包括module. Loa…
C#开发者在开发WinForm程序.Asp.Net Web(MVC)程序等,不可避免的在项目中引用许多第三方的DLL程序集, 编译后引用的dll都放在根目录下.以我个人作品 AutoProject Studio 自动化项目生成器 为例,由于需要支持SQL Server. Oracle.MySQL.PostgreSQL.DB2.Sybase.Infomix.SQLite.Access等多种数据库,所以引用了DmProvider.dll. IBM.Data.DB2.dll.IBM.Data.Info…
这是一个老问题,以前也有朋友写过一些文章介绍,但可能还不是很全面.我也多次被人问到,这里结合案例再次谈谈,希望对大家有所帮助. 本文范例代码可以通过这里下载 http://files.cnblogs.com/chenxizhang/AssemblyMatchDemoSolution.zip 根据程序集的特征,讨论这个问题,我们大致上有两个分类 没有做强名称签名的程序集 对于这种情况,CLR查找和加载程序集的方式如下 程序的根目录 根目录下面,与被引用程序集同名的子目录 根目录下面被明确定义为私有…
原文:再谈CLR查找和加载程序集的方式 这是一个老问题,以前也有朋友写过一些文章介绍,但可能还不是很全面.我也多次被人问到,这里结合案例再次谈谈,希望对大家有所帮助. 本文范例代码可以通过这里下载 http://files.cnblogs.com/chenxizhang/AssemblyMatchDemoSolution.zip 根据程序集的特征,讨论这个问题,我们大致上有两个分类 没有做强名称签名的程序集 对于这种情况,CLR查找和加载程序集的方式如下 程序的根目录 根目录下面,与被引用程序集…
如何创建强命名程序集(Strong Name Assembly)     创建一个强命名程序集首先需要获得一个用强命名实用工具   (Strong Name Utility,即SN.exe,.NET SDK自带)产生的密钥.   下面简要介绍一下SN.exe的一些用法. 要产生一个公钥/私钥对:     a)SN –k MyCompany.Keys   该命名告诉SN.exe创建一个名为MyCompany.keys的文件.MyCompany.keys文件将包含以对以二进制格式存储的公有密钥和私有…
本章主要讨论在编译时对一个类型一无所知的情况下,如何在运行时发现类型的信息.创建类型的实例以及访问类型的成员.可利用本章讲述的内容创建动态可扩展应用程序. 反射使用的典型场景一般是由一家公司创建宿主应用程序,其他公司创建加载项(add-in)来扩展宿主应用程序.宿主不能基于一些具体的加载项来构建和测试,因为加载项由不同公司创建,而且极有可能是在宿主应用程序发布之后才创建的. 程序集加载 我们知道,JIT编译器将方法的IL代码编译成本机代码时,会查看il代码中引用了哪些类型.在运行时,jit编译器…
所知IL是与CPU无关的机器语言,其能访问和操作对象类型,并提供指令来创建和初始化对象,调用对象上的虚方法以及直接操作数组对象等,故可视为一种面向对象的机器语言.每种语言的存在都有其存在的价值和原因,同时各自有各自的优势,由于CLR的独特性,可以尝试用不同语言描述不同功能(必须是面向CLR的编译器语言). 在方法执行时,需把方法的IL转换成本机CPU指令,这是JIT编译器的职责.一个方法首次调用时: CLR在Main方法执行之前会检测其代码所引用的所有类型,并分配一个内部数据结构来管理对引用类型…