.NET组件程序设计 第5章 版本控制

为毛突然就说起版本控制了,不解

 

程序集版本号:

每个程序集都有一个版本号,该号应用于此程序集中所有组件(多个模块)。

打开程序集信息对话窗,为一程序集属性可视化编辑器,这些属性存在项目的AssemblyInfo.cs中。

 

版本号基础:

由主版本号,次版本号,构建版本号,修改号共4部分组成。

 

程序集部署模型:

1.专用程序集,每个客户端程序维护自己专用本地程序集拷贝。

2.共享程序集,被多个客户端程序共享使用,必须安装在名为GAC(全局程序集缓存)的公共位置。

 

程序集解析器:

负责管理程序集兼容。

客户端应用程序声明一类型,该类型的程序集未加载,.NET搜索客户端程序集清单,查找该客户端所需程序集名称和版本,传递给程序集解析器。解析器首先搜索GAC,再搜索客户端应用程序文件夹,找到兼容程序集加载,找不到则抛出异常。

 

程序集强名:

GAC中,通常包含多个提供商的程序集,.NET必须提供一个唯一标示共享程序集的途径。类似MyAssembly这样的友好名是不够的会于其他提供商程序集同名。COM使用GUID(全局唯一标示符),为每个组件分一128字节号码。但GUID有缺陷,任何人都可以看到,复制他用一恶意组件替代。GUID只保证了唯一性,但未保证真实性。

 

强名称:.NET共享程序集包含其创建和原始内容唯一的证明。.NET使用一对公私密钥创建强名称。关键在于,由一个密钥加密的东西只能由另一个密钥破解。比如,私密钥加密的东西只能使用公密钥破解。

 

强名程序集在编译中,使用私密钥加密程序集哈希,生成唯一数字签名。编译器然后将该数字签名,公密钥附加到程序集清单中,每个客户端程序集都可以访问公密钥。私密钥不可访问。

 

客户端程序触发.NET程序集解析器,先从GAC开始搜索,如找到匹配友好名程序集,先读取其公钥与客户端所需程序集公钥对比。然后,用公钥破解数字签名而得到的哈希值与找到程序集哈希值比较,看是否为源文件,保证内容真实性。匹配,加载程序集。

 

只带友好名的程序集可以引用任何强名程序集,强名程序集只可引用强名程序集。

 

程序集项目 -> 属性 -> 签名可创建强名程序集

 

延迟签名:

编译器将公钥嵌入程序集清单,但不生成程序集签名(因为未使用私钥加密),客户端可引用强名程序集,但不可运行。用于大型组织,中期内部构建,严格管理私钥。

安装共享程序集:

一旦为某程序集分配了强名,便可将之安装在GAC(Windows/assembly/)中。需.NET配置工具。

在整个解决方案中共享版本号(SolutionInfo.cs):

项目解决方案 -> 添加现有项 -> 选择SolutionInfo.cs -> 单击添加,生成Solution Items文件夹

SolutionInfo.cs文件中加入该项目中需要共享的程序集属性:版本号,公司名,版权,商标

编辑项目中每个程序集AssemblyInfo.cs文件,去掉共享部分的属性指定。准备引用SolutionInfo.cs文件链接。

每个程序集 -> 添加现有项 -> SolutionInfo.cs -> 不要双击,选择“添加为链接”

SolutionInfo.cs链接丢入Properties文件夹,完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值