C#学习笔记(七)基于组件的应用程序设计


Component-based Design and Programming

基于组件编程有很多的优势:代码重用,团队支持,多语言开发和独立更新。在1990年,COM是微软流行的基于组件开发的模型。.NET替代了COM,提供了一个全新模型:语言独立的、注册自由、版本明确……


建立组件

什么是组件?组件==编译后的实体。组件在.NET中就是Assembly(exe/dll)。
组件与物理打包相关,多层应用程序是一个很好的表现组件的例子。
在VS.NET中创建ClassLibrary就可以创建组件。按照标准的设计和编码过程,使用名称空间进行逻辑组织,使用类和OO的设计。

可使用internal关键字限制只能被组件内部的类访问,在组件外部没有权限访问。

版本号:major.minor.build.revision
AssemblyInfo.cs中的属性可以控件。在编译时被放置到Assembly中,默认情况下版本号在每次build时都会被改变。版本号中的“*”可以每次被变化,否则会固定。

谁来控制版本:开发者来决定何时改变版本号(任何时候),但需要保证在不同版本中的兼容性(如果需要)

默认情况下,.NET&CLR会忽略版本号。如果.EXE需要.DLL,那么任何版本的.DLL都可以。如果组件有“强命名/强名称(strong name),那么如果EXE提及需要1.0.3.12版本的DLL,那么它必须查找到1.0.3.12版本的DLL。

Assembly在.NET的命名有四部分:
1)friendly,human readable name
2)culture
3)version#
4)public key token
Assembly如果有公钥token,那么它就有强命名,这表示它被私钥数字签名过。

强命名的好处:安全性,组件无法篡改!组件的多个版本可以共存。应用程序可以使用它建立时的组件版本,而不是第一个找到的DLL。

强命名,通过属性来设置除Friendly name之外的属性。如:

[assembly:AssebmlyCulture("")]
[assembly:AssemblyVersion("1.0.0.0")]//如果最后一位想自动变换可写成“*”
[assembly:AssemblyKey("..//..//pubpriv.key")]

强命名生成步骤:
1)生成一组public-private key pair。
2)将其通过AssemblyInfo.cs属性应用到组件中。
3)重新编译assembly
4)重新编译客户端

如何建立Public/Private Key文件?
使用.NET“SN”命令行用法,-K选项生成key pair。将该文件旋转在VS Solution/project目录下即可。如:

SN.exe -k pubpriv.key

如何保护Key文件?

私钥key的安全,必须保证该文件是秘密的。并不是每个程序员都需要一份key文件的拷贝,因为.NET支持延迟签名。在发布之前,部署团队可以签署assembly。

[assembly:AssemblyDelaySign(true)]

 


部署组件

前提:.NET必须安装在目标计算机中,应用程序必须安装在目标计算机中,应用程序必须在运行时可以定位组件。
如果不使用强命名,先去找AppBase,否则找sub-dir with same name。否则再去找private path。在配置文件中配置其路径。

如果使用强命名,先去找GAC,再去找CodeBase directory等。

部署时可使用Xcopy或Zero-touch。

版本转向:
应用程序的config文件将覆盖EXE的manifest。例如EXE引用1.0.0.0的BT,我们要求EXE使用2.0.0.0。则如下:
<configruation>
  <runtime>
    <assemblyBinding xmlns="...">
      <dependentAssembly>
        <assemblyIdentity name="BusinessComponent" publicKeyToken = "1234ASDF"/>
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
    </runtime>
</configuration>

.NET 1.0环境下开发的程序基本可运行于.NET2.0,不需要版本转向。


如何将组件放到GAC中?
1)组件必须是强命名的。
2)使用.NET“gacutil”命令行工具。>gacutil /i BusinessComponent.dll即可安装

这样可以共享DLLs,并行安装不同版本,获得更快的下载时间。

CodeBase可以转向到不同的目录和机器,保存用户的internet下载缓存。对每个版本只有一个codebase。

 


配置组件


允许覆写一些.NET默认的行为。应用程序提供配置信息的机制。例如数据库连接字符串。
缺点(潜在的冲突)
1)machine-wide config
2)用户自己的config file
3)应用程序配置
4)组件配置

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值