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

    技术2022-05-11  52

    Component-based Design and Programming

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

    建立组件

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

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

    版本号:major.minor.build.revisionAssemblyInfo.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 name2)culture3)version#4)public key tokenAssembly如果有公钥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)重新编译assembly4)重新编译客户端

    如何建立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 config2)用户自己的config file3)应用程序配置4)组件配置

     


    最新回复(0)