如何在没有 IIS 的系统上安装和运行 ASP.NET 应用程序






4.73/5 (15投票s)
2005年12月24日
8分钟阅读

136856

623
本文介绍如何创建一个 Visual Studio .NET 安装项目,该项目允许在没有安装 IIS 的计算机上部署 ASP.NET 应用程序。熟悉 Visual Studio .NET 安装项目将有助于更好地理解本文内容。
- 下载 Visual Studio .NET 2003 的演示解决方案 - 23.4 Kb
(您需要运行 IIS 管理控制台才能将 SampleNonIISWebApp 转换为 IIS 应用程序。)
引言
生活中的一个残酷事实是:IIS 是不可再分发的。如果您编写了一个 ASP.NET 应用程序,目标系统几乎必须预装 IIS。否则,您的客户将需要具备设置 IIS 和后续配置 ASP.NET 以在 IIS 上运行的技能。这自然会大大缩小您的目标受众,因为那些希望运行 ASP.NET 应用程序但又没有 IT 部门来设置和维护 IIS 的人将被排除在外。据我所知,IIS 不能作为安装过程的一部分自动安装。为了解决这个问题,许多开发人员开始依赖 Cassini 的各种变体 - 这是一个最初由 Microsoft 在 www.asp.net 上发布的示例 Web 服务器,现在已成为 Visual Studio .NET 2005 的默认调试 Web 服务器。为了说明如何在没有 IIS 的计算机上安装和运行 ASP.NET 应用程序,我们将采用 Cassini 的一个版本,该版本包含预打包的合并模块 - 这是一个自安装的 Visual Studio .NET 组件,当包含在 Visual Studio .NET 安装项目中时,会自动安装到目标系统上。您需要安装 Cassini Server 才能成功完成此安装项目创建演练。根据您使用的 ASP.NET 和 .NET Framework 的版本,您可能需要获取 Cassini 1.1 - 用于 ASP.NET 1.1 应用程序,或者 Cassini 2.0 - 用于最新的 ASP.NET 2.0 应用程序。
安装 Cassini 后,首先确保您的 ASP.NET 应用程序与 Cassini 兼容。在大多数情况下,它应该是兼容的,但有时如果您的应用程序使用 IIS 特定的功能(如 IIS 服务器变量),您可能需要进行更改。要检查您的应用程序与 Cassini 的兼容性,请从“开始”菜单运行 Cassini Explorer,并将您的 ASP.NET 应用程序注册到 Cassini。要注册应用程序,您只需要提供应用程序的物理位置,如果默认文档名称不是“default.aspx”,则提供该名称,并生成应用程序的 ID。其余字段是可选的。注册应用程序后,单击 Cassini Explorer 主页上的链接即可查看您的 ASP.NET 应用程序在没有 IIS 的情况下运行。如果一切正常,您可以开始创建安装项目,使其应用程序能在客户端系统上在没有 IIS 的情况下运行。
安装项目创建演练
在本演练中,我们将创建一个常规(非 Web)安装项目,然后将您的应用程序的“主要输出”和“内容输出”添加到安装项目中,包含 Cassini 合并模块,并编程安装项目的自定义操作,以便在安装期间以编程方式注册您的应用程序到 Cassini,并在卸载期间将其注销。
现在,让我们一步一步地执行这些操作。我们假设您已经有一个包含 ASP.NET 应用程序的解决方案。所包含的示例包括一个单页 ASP.NET 示例应用程序以及示例安装项目。
- 首先,向托管您的 ASP.NET 项目的 Visual Studio .NET 解决方案添加一个新的安装项目。
- 由于在 Visual Studio 2003 中,安装项目默认被排除在生成之外,您需要右键单击解决方案并打开“配置管理器”。在那里,切换到“发布”配置,并选中您新创建的安装项目对应的“生成”复选框。进行一次测试生成 - 确保您的安装项目已生成。
- 将您的 ASP.NET 项目输出添加到安装项目中。为此,请右键单击安装项目,然后选择“查看”|“文件系统”。在安装项目的“文件系统”窗口中,右键单击“应用程序文件夹”,然后选择“添加”|“项目输出”。在弹出的窗口中,如果您的 ASP.NET 项目未默认选中,请从“项目”下拉列表中选择它。通过按住 Ctrl 键进行多选“主要输出”和“内容文件”项目,然后单击“确定”。
- 将 Cassini 自安装的可再分发模块添加到安装项目中。为此,请右键单击您的安装项目,然后选择“添加”|“合并模块”。在弹出的“打开文件”对话框中,为 ASP.NET 1.1 应用程序选择 CassiniRedistributable.msm 文件,或为 ASP.NET 2.0 应用程序选择 Cassini2Redistributable.msm 文件。如果您看不到这些文件,请确保“打开文件”对话框显示“C:\Program Files\Common Files\Merge Modules”文件夹的内容。请注意,一旦您将 CassiniRedistributable.msm 添加到安装项目中,Visual Studio .NET 将自动将 CassiniExplorerMergeModule.msm 文件添加到“检测到的依赖项”区域。这没关系 - 正是应该这样。这两个文件 - 整个 Cassini Web 服务器 - 将只为您的项目增加 400 KB 的大小。
- 将自定义安装程序类添加到您的 ASP.NET 项目中。右键单击您的 ASP.NET 项目,然后选择“添加”|“添加新项”。在“模板”列表中,选择“安装程序类”,然后单击“打开”按钮将该类添加到项目中。
- 将对 CassiniConfiguration.dll 程序集的引用添加到您的 ASP.NET 项目中。该程序集实现了一个简单的 Cassini 应用程序管理 API。为此,请右键单击您的 ASP.NET 项目,然后选择“添加引用”。在弹出的窗口中,单击“浏览”按钮,然后导航到“C:\Program Files\UltiDev\Cassini ASP.NET 1.1 Server”文件夹(用于 ASP.NET 1.1 应用程序)或“C:\Program Files\UltiDev\Cassini ASP.NET 2.0 Server”文件夹(用于 ASP.NET 2.0 应用程序)。从中选择 CassiniConfiguration.dll 添加到您的项目引用中。
请进行解决方案的测试生成,并检查 CassiniConfiguration.dll 是否已出现在您安装项目的“检测到的依赖项”区域。如果没有,请转到安装项目的“文件系统”视图,并突出显示“应用程序文件夹”下的“Bin”文件夹。右键单击“Bin”文件夹,然后选择“添加”|“文件”。导航到您的 ASP.NET 应用程序的 bin 文件夹,通常是“c:\inetpub\wwwroot\YourAppName\bin”,然后双击 CassiniConfiguration.dll。
- 在自定义安装程序类中实现安装自定义操作。将以下代码粘贴到
Installer1
类实现中C# 示例
private static readonly Guid applicationID = new Guid("{88EEE2B2-57D5-4869-A85E-9666FCDD390E}"); // <= Replace the GUID with your own public override void Install(IDictionary savedState) { string appLocation = Context.Parameters["applocation"]; CassiniConfiguration.Metabase.RegisterApplication(applicationID, // Replace with your real application name "My Great Web Application", // Replace with your real app description "Application description", // May need to replace default document name appLocation, "WebForm1.aspx"); base.Install(savedState); } public override void Rollback(IDictionary savedState) { CassiniConfiguration.Metabase.UnregisterApplication(applicationID); base.Rollback (savedState); } public override void Uninstall(IDictionary savedState) { CassiniConfiguration.Metabase.UnregisterApplication(applicationID); base.Uninstall (savedState); }
VB.NET 示例
Imports CassiniConfiguration Private Shared ReadOnly applicationID As Guid Shared Sub New() Installer1.applicationID = _ New Guid("{88EEE2B2-57D5-4869-A85E-9666FCDD390E}") End Sub Public Overrides Sub Install(ByVal savedState As IDictionary) Dim appLocation As String = _ MyBase.Context.Parameters.Item("applocation") Metabase.RegisterApplication( _ Installer1.applicationID, _ "Is IIS Neccessary?", _ "Life after IIS is fun!", _ appLocation, "WebForm1.aspx") MyBase.Install(savedState) End Sub Public Overrides Sub Rollback(ByVal savedState As IDictionary) Metabase.UnregisterApplication(Installer1.applicationID) MyBase.Rollback(savedState) End Sub Public Overrides Sub Uninstall(ByVal savedState As IDictionary) Metabase.UnregisterApplication(Installer1.applicationID) MyBase.Uninstall(savedState) End Sub
现在,您需要更改代码片段中突出显示部分的**值**,以反映适合您应用程序的实际值。要为您的应用程序生成新的 GUID,您可以运行此命令行:%VS71COMNTOOLS%guidgen.exe。在弹出的窗口中,选择选项 4,然后单击“复制”按钮。将复制的值粘贴到上面代码段的 GUID 值上。进行测试生成,以确保到目前为止您的解决方案运行正常。
- 将您的自定义安装程序类挂接到安装项目中。为此,请右键单击安装项目,然后选择“查看”|“自定义操作”。现在,对于列表中的每个自定义操作,执行此操作:右键单击自定义操作文件夹,然后选择“添加自定义操作”。在弹出的窗口中,双击“应用程序文件夹”的 bin,然后双击 ASP.NET 应用程序项目的“主要输出”项。这将调用您在上一步中实现的安装类的方法。要将安装文件夹的名称传递给安装类,请突出显示“安装自定义操作”下的“主要输出”项,然后在属性编辑器中,将 /AppLocation="[TARGETDIR]\" 粘贴为
CustomActionData
属性的值。 - 以上就是创建 ASP.NET 应用程序安装程序的必要步骤。现在,您可以进行生成,并通过右键单击您的安装项目并选择“安装”来运行测试安装。安装完成后,从“开始”菜单运行 Cassini Explorer,在注册的 Cassini 应用程序中查看您的应用程序。在进行下一次生成之前,请卸载您的产品。
请记住,Visual Studio .NET 安装项目在尝试在产品已安装的情况下进行生成时,其“检测到的依赖项”可能会出现问题。在进行下一次生成之前,请勿忘记卸载您的产品。如果您在产品已安装的情况下进行了生成,请卸载产品,然后右键单击“检测到的依赖项”并选择“刷新依赖项”。
以下几步是可选的。它们描述了如何为目标系统上的应用程序创建“开始”菜单快捷方式。
- 通过将 LocalStart.htm 文件添加到您的 ASP.NET 项目来开始创建“开始”菜单快捷方式。为此,请在 Visual Studio .NET 中右键单击您的 ASP.NET 项目,然后选择“添加”|“添加 HTML 页”。在弹出的窗口中,将文件名更改为 LocalStart.htm,然后单击“确定”。在 HTML 源模式下打开 LocalStart.htm 文件,并用以下内容替换其当前 HTML
<html> <head> <title></title> <meta http-equiv="refresh" content="0;url=https://:7756/GoToApplication. aspx?AppID=88EEE2B2-57D5-4869-A85E-9666FCDD390E"/> </head> <body> </body> </html>
替换上面突出显示的 GUID 为您在第 7 步生成的应用程序 GUID,并保存 LocalStart.htm 文件。您可以在 ASP.NET 项目的 Installer1.cs 文件中找到您的应用程序 GUID 值。
如果您在此阶段进行测试生成并安装产品,将浏览器指向 LocalStart.htm 应该会启动您的应用程序。在进行下一次生成尝试之前,请不要忘记卸载产品。
- 要创建实际指向 LocalStart.htm 的“开始”菜单快捷方式,首先通过右键单击安装项目并选择“查看”|“文件系统”来切换到安装项目的“文件系统视图”。在那里,右键单击“应用程序文件夹”下的 bin,然后选择“添加”|“文件”。导航到您在上一步创建的 LocalStart.htm 文件,然后双击它。该文件的通常位置是“c:\inetpub\wwwroot\YourApplicationName\LocalStart.htm”。现在,您应该能在安装项目的“应用程序文件夹” bin 中看到 LocalStart.htm 文件。右键单击“应用程序文件夹”中的 LocalStart.htm 文件,然后选择“创建快捷方式”。将快捷方式重命名为类似“我的超棒 ASP.NET 应用程序”的名称。之后,将“应用程序文件夹”下的“我的超棒 ASP.NET 应用程序”项拖放到“用户程序菜单” bin。保存所有文件,进行测试生成,并安装您的产品。安装完成后,您应该能在“开始”菜单中看到“我的超棒 ASP.NET 应用程序”项。单击它,即可在无需安装 IIS 的计算机上运行您的 ASP.NET 应用程序。
现在,您可以调整安装项目选项,使其反映您的产品和公司标识。