Professional Documents
Culture Documents
{强名称} NET应用程序的部署技术
{强名称} NET应用程序的部署技术
.NET 应用程序的部署技术
Technology of Disposing .NET Program
蔡体健 谢 昕
Cai Tijian Xie xin
华东交通大学信息工程学院 南昌 330013
(School of Information Eng.,East China Jiaotong Uni., Nanchang 330013)
0 引言 或 Microsoft 系统管理服务器 (SMS) Visual Stu-
NET Framework 具有容易移植 跨平台 跨语 dio .NET 提供了安装与部署项目 通过这个项目
言集成等优点 在软件开发架构方面 NET Frame- 可以使用安装向导快速生成窗口应用程序或 W e b 应
w o r k 已成为软件开发的通用平台 所谓软件的 部 用程序的安装程序
署 就是将制作完成的组件或应用程序安装到其他 在非正式的情况下 有时只是希望简单的将应
计算机使用 由于 NET Framework 的功能全面 涉 用程序复制到其他计算机 那么会产生一些问题
及的方面较广泛 使得软件的开发部署过程显得比 例如 组件的设置 Web 应用程序虚拟目录的路径或
较复杂 本文正是作者在使用 C # 进行软件开发后 名称等不同 对于窗口应用程序 问题比较容易解
对部署. N E T 应用程序的一些心得体会 决 而对于 W e b 应用程序 将项目文件夹复制到指
1 NET 提供的安装和部署项目 定计算机后 还需要将项目文件夹设置成 Web 共享
由于安装应用程序的计算机与制作应用程序的 然后在项目文件夹内找到扩展名为. w e b i n f o 的文
计算机的设置不同 简单的将应用程序复制到其他 件 用记事本打开此文件 将文件中 Web URLPath
计算机的方法会出现许多问题 软件部署的最好方 的值改为项目文件夹的 W e b 共享名可解决问题
式就是将应用程序打包为通用的分发格式 如 .cab 2 组件的路径设置
或 . m s i 文件 许多应用程序都采用应用程序分 .NET 应用程序可以用多种方式部署 这取决于
发机制进行安装 如使用了 Microsoft Installer 应用程序的复杂程度 安全和保护要求 以及应用
技术的 Microsoft Windows 2000 IntelliMirror 程序的分发方式 基于组件的应用程序的部署比较
90
万方数据
复杂一些 如果组件是对应用程序专用的 那么基 许多应用程序都使用由许多应用程序共享的组
于组件的应用程序的部署基本上可以按与简单应用 件 默认情况下 这些组件安装在系统中的公用位
程序相同的方式对待 但是组件若与相关或潜在的 置 -- 全局程序集缓存 (GAC)中 系统会在该位置查
应用程序共享 则需要注意应用程序所引用的组件 找每个程序的组件 我们可以使用 N E T S D K 提供
的存放路径 一般情况下应用程序文件和组件文件 的 Gacutil.exe/i 工具 将组件添加到全局程序集
必须驻留在同一目录中 例如 Visual Studio .NET 缓存中
默认编译后应用程序和组件是在同一个目录下 但 多个应用程序共享单个组件常常会导致这样的
是组件文件能否不与应用程序文件存放在同一目录 情况 与一个应用程序一起安装的组件会改写现有
下呢 为此.NET Framework 需要建立单独的基于 的已安装组件 从而可能导致其他应用程序中断
X M L 的应用程序配置文件来支持位于其他目录中的 如何在多个应用程序之间互不干扰地共享组件呢
组 件 例 如 有 一 个 窗 口 应 用 程 序 解决办法是将组件程序集的不同内部版本号与客户
windowsApplication1.exe 它需要引用三个组件 端应用程序关联起来 这种内部版本号由版本号和
ClassLibrary1.dll ClassLibrary2.dll 一种特殊值 叫做发信方 的组合来表示 系统随
ClassLibrary3.dll 这三个组件集中存放在 后可以将这些组件程序集隔离 以便不同版本对于
ClassLibrary 文件夹下 如果应用程序要访问此文 不同的客户端应用程序可以同时运行 即应用程序
件夹下的组件 需要建立一个此应用程序的配置文 可以与同一应用程序的其他版本并行运行 而不影
件 windowsApplication1.exe.config 此配置文 响它们各自的执行环境
件与可执行文件驻留在同一目录中 它具有可执行 如何为组件添加内部版本号呢 在此首先阐述
文件的完整名称 并有一个额外的文件扩展名 . 一下发信方签名的工作原理 如图一所示
config 此配置文件是标准的 XML 文件 具体设
置如下
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-
microsoft-com:asm.v1">
<probing privatePath="ClassLibrary"/>
</assemblyBinding>
</runtime>
</configuration> 图一 为组件签名的工作原理图
当此配置文件与可执行文件放在同一目录中 若程序集 B 将引用程序集 A 为保证程序集 A 是
时 .NET 环境在运行时除了在应用程序的目录中查 未被篡改可信赖的组件 需要为程序集 A 添加签名
找组件外 还会在 privatePath 标记所确定的子 方法是
目录 ClassLibrary 中查找组件 特别需要注意的是 开发者首先使用强名称工具 (Sn.exe) 生成新
组件文件可以不与应用程序文件存放在同一文件夹 密钥对 私钥和公钥 然后开发环境或工具使用私
内 但它只能存放在应用程序文件夹下的子目录中 钥对程序集 A 进行签名 该数字签名存储在包含程
3 使用强名称为共享组件签名 序集 A 的清单的可移植可执行文件中 程序集 B 引
91
万方数据
科技广场 2005.8
92
万方数据