安装和部署企业程序库

作者:黎波

日期:200563

安装步骤

  1. 安装EntLib后下载Patch 1475 并且更新到原来的代码 [0]
  2. \src \bin目录复制到新的根目录(如:C:\EntLib),以便下面的修改 [1]
  3. sn.exe 生成一个强名的Key [2]
  4. 修改每个项目的AessemblyInfo.cs [3]
  5. \src 目录下的所有批处理文件移动到EntLib根目录
  6. 根据需要修改所有批处理文件中的路径参数
  7. 在命令符方式下执行\src\BuildLibrary.bat,重新编译EntLib解决方案 [4]
  8. 在命令符方式下执行\src\CopyAssemblies.bat,把每个项目生成的程序集复制到bin目录 [5]
  9. 生成一个批处理文件,用来安装AssemblyGAC [6]
  10. 执行步骤7生成的批处理安装EntLib V1.0 AssemblyGAC [7]
  11. 修改注册表,定位Assembly的引用 [8]
  12. 备份步骤3产生的密钥文件
  13. 把修改后的EntLib进源代码库,\bin目录发布给项目组的开发成员 [9]

相关说明

[0] Patch 1475 用于解决在配置应用程序块(Configuration Application Block)中发现的内存泄漏问题。相关内容请看 Patch 1475 for Configuration Application Block released

[1] 为了让EntLib更好地在实际项目中使用,我们需要对EntLib进行一些修改。修改后的版本用于实际项目中,原来的版本用于学习。之所以要分两个版本,是因为当给EntLib的程序集加入强名称后,它们的全限定名称改变了,而EntLib的配置文件中需要指定各个EntLib程序集的全限定名称,这样就导致了所有基于原本的EntLib编写的应用,要经过手工修改所有配置文件中的程序集全限定名称后,才能正常使用,不然EntLib自带的配置工具会无法读取这些配置信息。

[2] 在根目录下执行

sn –k EntLib.snk (当然如果你的应用或项目已经有了自己的Key则可省略)

创建一个批处理文件(InstallSN.bat),里面可以就只有一句话,并且运行

sn -i EntLib.snk EntLibContainer

这样我们在强名的时候就可以不使用AssemblyKeyFile选项,因为它总是需要路径,Build的时候,经常会为这个相对路径搞来搞去。现在只要通过 AssemblyKeyName选项就可以指定了,不用担心路径问题。

[3] EntLib解决方案中有一个GlobalAssemblyInfo.cs 文件,每个项目都有一个自己的 AssemblyInfo.csGlobalAssemblyInfo.cs 保存着编译配置、公司/产品、版权声明和版本号,每个项目自己的AssemblyInfo则保存自己的Assembily名和CLR权限设置。

不必为每个项目的AssemblyInfo.cs文件加入强名称的代码,只要用文本编辑器打开GlobalAssemblyInfo.cs文件,并在其中加一句

[assembly : AssemblyKeyName("EntLibContainer")]

而不使用AssemblyKeyFile选项,然后保存GlobalAssemblyInfo.cs文件。

我是这样做的:打开EntLib解决方案,用VS自带的查找和替换功能将每个项目的AssemblyInfo.cs 中有关加强名称的三行代码注释掉

//[assembly : AssemblyDelaySign(false)]
//[assembly : AssemblyKeyFile("")]
//[assembly : AssemblyKeyName("")]

然后再给GlobalAssemblyInfo.cs 加入下面三行代码。

[assembly : AssemblyDelaySign(false)]
[assembly : AssemblyKeyFile("")]
[assembly : AssemblyKeyName("EntLibContainer ")]

[4] 在执行BuildLibrary.bat 文件之前,先用记事本打开它,将里面的

set buildType=Debug 修改为 set buildType=Release

确保 set visualStudioDir= 中的VS.NET 的安装路径正确。

[5] 在执行CopyAssemblies.bat 文件之前,先用记事本打开它,将里面的

set buildType=Debug 修改为 set buildType=Release

[6] 主要是生成一个批处理文件,将我们编译好的EntLibGacutil.exe工具安装到GAC中。通过修改EntLib原来目录下的InstallServices.bat文件,就可以变成非常合适的工具InstallAssemblyToGAC.bat。然后再修改一下就可以生成一个UninstallFromGAC.bat,这两个批处理修改路径之后还可以供开发人员使用二进制的EntLib时使用。

这里还有的一个可选操作是执行InstallServices /u ,我想这是建议的,之后我们要重新编译EntLib项目和注册,所以最好将之前InstallServices做的工作Uninstall

[7] 运行之前生成的批处理将EntLib相关的程序集安装到GAC中。除了InstallServices.bat中包括的Assembly,我又增加下面一些Assembly

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll
Microsoft.Practices.EnterpriseLibrary.Logging.Sinks.Database.dll
Microsoft.Practices.EnterpriseLibrary.Security.ActiveDirectory.dll
Microsoft.Practices.EnterpriseLibrary.Security.AzMan.dll
Microsoft.Practices.EnterpriseLibrary.Security.Cache.CachingStore.dll
Microsoft.Practices.EnterpriseLibrary.Security.Database.dll
Microsoft.Practices.EnterpriseLibrary.Security.Database.Authentication.dll

之后再运行InstallServices.bat 这样新的Enterprise Library就算安装上了。

[8] 为了在Visual Studio能够寻找到EntLib 和方便添加引用,我们需要在注册表的AssemblyFolders 中添加Enterprise Library的地址。可以参考MSDN LibraryJohan DanforthWebLog.

这样就方便多了,免得多次打开浏览窗口,一个目录一个目录的找了。之后将这个注册表的条目导出为文件(RegAddRefDialog.reg),修改之后复制到EntLib的根目录供其他人员使用。

[9] 通过上述的修改,现在EntLib根目录中有\bin \src 两个目录,还有一些用于安装和部署EntLib的批处理文件、注册表项文件和强名称文件。

 

[参考]

Enterprise Library 放到你的应用或产品中 ccBoy(小气的神)
http://www.dotnettools.org/2005/doc/entlib/EntLib001.htm 

posted @ 2005-06-03 15:24  黎波  阅读(4254)  评论(6编辑  收藏  举报