如何配置程序集的版本策略
本文节选自《.NET程序员面试指南》一书
在实际工作中,版本策略被使用得比较多,本节将借助分析这个面试题来简要介绍程序集的版本策略和配置方法。
所涉及到的知识点
• 版本策略的基本原理
• 程序集版本策略的配置
分析问题
当一个程序集通过名字、版本、文化和公钥进行加载时,CLR允许程序员指定该程序集的哪些版本可以代替目前版本进行加载。这些都是通过版本策略来实现的。所谓的版本策略,就是一个程序集版本的重定向,把加载当前这个版本定向到加载可替代的版本。版本策略可以在以下三个级别上进行配置:
• 应用程序策略
• 发行者策略
• 计算机策略
这三个级别的版本策略都可以通过XML文件来进行配置。现在笔者来分别介绍。
1.应用程序策略
应用程序策略可以在应用程序配置文件中进行配置,应用程序配置文件位于应用程序目录下。对于.EXE应用程序,其配置文件由exe文件名加上.config后缀名构成,例如一个test.exe的应用程序,其配置文件就是test.exe.config。而对于任何一个Web应用程序来说,其配置文件的文件名都是web.config。
版本策略都记录在配置文件的assemblyBinding节点下。代码2-7是一个应用程序的配置文件例子,这里只选取了本节所关心的版本策略部分内容。
代码2-7 VersionStrategy:Web.Config
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding>
<!--对这个程序集进行版本重定向-->
<dependentAssembly>
<assemblyIdentity
name="NET.MST.Second.Compile"
publicKeyToken="60c29e5f0af3e9bb">
</assemblyIdentity>
</dependentAssembly>
<!--重定向的策略-->
<bindingRedirect oldversion="0.0.0.0-12.2.2.2"
newversion="12.3.0.0">
</bindingRedirect>
</assemblyBinding>
</runtime>
</configuration>
在代码2-7这个配置文件中,指定了NET.MST.Second.Compile,60c29e5f0af3e9bb这个组件的版本策略,这个策略将0.0.0.0到12.2.2.2之间的所有版本重定向到12.3.0.0版本上。
2.发行者策略
发行者策略是针对那些被放入全局程序集缓存(GAC)中的程序集,发行者策略以一个和代码2-6同样格式的配置文件形式绑定到程序集上,被一同放入GAC中。发行者策略配置文件的文件名非常古怪,它是这样的一个字符串:主版本号.次版本号.程序集名.dll。正因为如此,一个程序集的每个主版本/次版本号只能有一个发行者策略。
3.计算机策略
同样地,计算机策略同样由一个配置文件表示,它的格式也和代码2-7基本类似。计算机级版本策略配置文件的文件名为:machine.config,它被存储在%SystemRoot%/ Microsoft.NET/ Framework/v****/CONFIG/目录下。
读到这里,读者可能会有这样的疑问:版本策略可以在3个级别进行配置,那这些策略是如何协作的呢?按照.NET的机制,3个级别的版本策略将会按照顺序依次执行,而上一级别的执行结果将会被作为下一级别的执行输入,图2.6展示了这个执行过程。
如图2.6所示,3个级别版本策略被依照:应用程序、发行者、计算机的顺序依次执行。而其中,发行者策略是可选的,在以下两种情况下发行者策略将不会被执行。
• 程序集没有被加入到GAC中
• 应用程序策略制定忽略发行者策略
在第一种情况下,根本就不存在发行者策略配置文件,当然CLR也就不会执行发行者策略。而第二种情况,是程序员在应用程序策略中指定忽略发行者策略,具体做法是在应用程序配置文件中加入publisherPolicy节点,并且把apply属性值设置为no。代码2-8就是在代码2-7的基础上,指定了忽略发行者策略。
代码2-8 VersionStrategy-NoPolisherPolicy:Web.Config
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding>
<!--对这个程序集进行版本重定向-->
<dependentAssembly>
<assemblyIdentity
name="NET.MST.Second.Compile"
publicKeyToken="60c29e5f0af3e9bb">
</assemblyIdentity>
</dependentAssembly>
<!--重定向的策略-->
<bindingRedirect oldversion="0.0.0.0-12.2.2.2"
newversion="12.3.0.0">
</bindingRedirect>
<!--指定忽略发行者策略-->
<publisherPolicy apply="no">
</publisherPolicy>
</assemblyBinding>
</runtime>
</configuration>
答案
CLR支持在3个级别上设定版本策略,依次是:应用程序策略、发行者策略和计算机策略。所有策略的设置都是通过修改配置文件来实现。3个级别的策略依次会被CLR执行,而上一个策略的执行结果将被作为下一个策略的输入。发行者策略仅仅针对那些放入GAC的程序集,并且可以在应用程序策略中被指定忽略。
5}J
J l/m8rsm13164110
分享到:
相关推荐
答案集程序与防火墙策略 答案集程序 防火墙策略 陈述式编程
在设计模式的策略模式中,需要动态加载程序集信息,本文通过一个简单的实例,来讲解动态加载Dll需要的知识点。 涉及知识点: AssemblyName类,完整描述程序集的唯一标识, 用来表述一个程序集。 Assembly类,在...
2.程序集是组件复用,以及实施安全策略和版本策略的最小单位。 3.程序集是包含一个或者多个类型定义文件和资源文件的集合。在程序集包含的所有文件中,有一个文件用于保存清单。(清单是元数据部分中一组数据表的...
这次写点有实际意义的,说说我是怎么保护我的代码的,个人心得,如有不妥的地方请见谅。...3.完全复制代码,做成一个可编译修改的项目;从危害是上来看,第三种是最严重的,如果你的软件被实力更强的竞争对手复制了,那...
双均线策略(期货) alpha对冲(股票+期货) 集合竞价选股(股票) 多因子选股(股票) 网格交易(期货) 指数增强(股票) 跨品种套利(期货) 跨期套利(期货) 日内回转交易(股票) 做市商交易(期货) 海龟交易法(期货) ...
程序集版本号 程序集部署模型 程序集强名称 Visual Studio 2005和版本划分 自定义版本策略 CLR版本划分 第6章:事件 基于委托的事件 使用.NET事件 第7章:异步调用 异步机制的必备条件 委托的老调重弹 异步调用编程...
程序集配置文件包拉取策略:程序集任务启动时需要加载任务所在的程序集,这个选项可以配置是否每次从master拉取最新文件或者本地worker存在文件就不拉取,方便
自主研发的集策略编写 测试 交易统计分析 参数优化 策略运 发布于一 体的综合策略研发平台 具有如下特点: 支持期货交易的程序化交易; 支持多种类型的行情源 交易渠道 如CTP 易盛 XSpeed(飞创极速交易平 台) 外盘...
针对形式化程序验证中的并行调度问题,提出了基于依赖集的算法。通过引入依赖图和依赖集概念,以形式化方式描述程序语句间的依赖关系,然后给出了从语法分析树构造依赖图和依赖集的算法;最后在此基础上设计了并行...
浏览器中的rs-debug-wasm 在浏览器中调试Web程序集这个项目是实验性的,远远没有完成。 这是为了向浏览器提供完整的调试支持以进行Web汇编(相对于原始源语言)。怎么运行的? 调试版本:通过WebSocket在本机rust...
matlab粗糙集属性约简程序,含详细注释
使用 Access Management Console 配置应用程序访问权限 32 使用 Access Management Console 创建跟踪日志 32 查看 Citrix 修补程序信息 32 使用 Access Management Console 进行远程监视时节省带宽 32 允许 Citrix ...
在此后的两年中,紧随着Microsoft Windows早期版本1.0之后,又推出了几种改进版本,以支持国际商业市场,并提供新型视讯显示器和打印机的驱动程序。 Windows版本2.0是在1987年11月正式在市场上推出的。该版本对使用...
集团级信息技术安全保障体系建设全套规范文件(IT...ISO27000信息安全管理体系文件全集(一级安全方针及全面领域安全策略、二级制度规范、三级标准及操作手册、四级程序文件及记录表单)等 安全管理咨询必备资料库。
解决多臂赌机问题的MATLAB强化学习程序合集:包括使用e-greedy策略、softmax策略以及时变的e-greedy策略求解多臂赌机问题。 “I thought what I'd do was I'd pretend I was one of those deaf-mutes, or should I?...
可以访问版本控制系统(VCS)提供程序。 注意:治理和策略计划是Terraform Cloud中的付费计划。 您可以通过查看Terraform Cloud文档中的“ 更改付款计划”部分来了解有关更改付款计划的更多信息。 文献资料↥返回...
matlab软件写一个程序代码