第九讲:基于组件的程序设计

*4步用来强命名
创建强命名组件的步骤:
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的安全-recompile
必须保证key文件是秘密的
每个程序员是否需要一份key文件的拷贝?
可能不会...
因为.NET支持后签名:
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\..\\pubpriv.key")]

*布署的前提:
.NET必须安装在目标计算机中
应用程序必须安装在目标计算机中
应用程序必须在运行时可以定位组件

*部署选项?
1、"XCopy"部署:
安装EXE,DLLs和支持文件到单一目录
.NET使用AppBase定位所有的组件和文件
2、"Zero-touch"部署
为.EXE设置一个URL:http://server/myapp/app.exe
客户端浏览URL
.NET在web服务器远程目录中设置AppBase!
.NET从AppBase下载.EXE和.DLLs

版本转向
应用程序的.config文件将覆盖 .EXE的manifest
例:
.EXE引用1.0.0.0 Business Tier
我们要求.EXE使用2.0.0.0
<configuration>
 <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.vl">
   <dependentAssembly>
    <assemblyIdentity name="BusinessComponent" publicKeyToken="123456789abcdef" />
    <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
   </dependentAssembly>
  </assemblyBinding>
 </runtime>
</configuration>

*如果不使用强命名
定位Assembly的算法
1、找与.exe相同目录。
2、找应用程序子目录。
3、找配置文件指定的目录。

*如果使用了强命名
定位Assembly的算法
1、确定版本号(基于metadata)然后检查.config文件并转向
2、查找GAC
3、查找应用程序目录


*安装到GAC
如何把组件放置进GAC中?
组件必须是强命名的
使用.NET "gacutil" 命令行工具:
gacutil /i BusinessComponent.dll

优势?
共享DLLs
并行安装不同的版本
更快的下载时间(在安装时刻,组件完整的检查)

*CodeBase
可以转向到不同的目录和机器
Dlls保存用户的internet下载缓存
对于每个版本只有一个codebase
<configuration>
 <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.vl">
   <dependentAssembly>
    <assemblyIdentity name="BusinessComponent" publicKeyToken="123456789abcdef" />
    <codeBase
      version="2.0.0.0"
      href="http://www.company.com/downloads/BusinessComponent.dll" />
   </dependentAssembly>
  </assemblyBinding>
 </runtime>
</configuration>
 

posted @ 2009-03-04 11:17  teacherzj  阅读(215)  评论(0编辑  收藏  举报