65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (15投票s)

2005年12月24日

8分钟阅读

viewsIcon

136856

downloadIcon

623

本文介绍如何创建一个 Visual Studio .NET 安装项目,该项目允许在没有安装 IIS 的计算机上部署 ASP.NET 应用程序。熟悉 Visual Studio .NET 安装项目将有助于更好地理解本文内容。

引言

生活中的一个残酷事实是: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 示例应用程序以及示例安装项目。

  1. 首先,向托管您的 ASP.NET 项目的 Visual Studio .NET 解决方案添加一个新的安装项目。
  2. 由于在 Visual Studio 2003 中,安装项目默认被排除在生成之外,您需要右键单击解决方案并打开“配置管理器”。在那里,切换到“发布”配置,并选中您新创建的安装项目对应的“生成”复选框。进行一次测试生成 - 确保您的安装项目已生成。
  3. 将您的 ASP.NET 项目输出添加到安装项目中。为此,请右键单击安装项目,然后选择“查看”|“文件系统”。在安装项目的“文件系统”窗口中,右键单击“应用程序文件夹”,然后选择“添加”|“项目输出”。在弹出的窗口中,如果您的 ASP.NET 项目未默认选中,请从“项目”下拉列表中选择它。通过按住 Ctrl 键进行多选“主要输出”和“内容文件”项目,然后单击“确定”。
  4. 将 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 的大小。
  5. 将自定义安装程序类添加到您的 ASP.NET 项目中。右键单击您的 ASP.NET 项目,然后选择“添加”|“添加新项”。在“模板”列表中,选择“安装程序类”,然后单击“打开”按钮将该类添加到项目中。
  6. 将对 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

  7. 在自定义安装程序类中实现安装自定义操作。将以下代码粘贴到 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 值上。进行测试生成,以确保到目前为止您的解决方案运行正常。

  8. 将您的自定义安装程序类挂接到安装项目中。为此,请右键单击安装项目,然后选择“查看”|“自定义操作”。现在,对于列表中的每个自定义操作,执行此操作:右键单击自定义操作文件夹,然后选择“添加自定义操作”。在弹出的窗口中,双击“应用程序文件夹”的 bin,然后双击 ASP.NET 应用程序项目的“主要输出”项。这将调用您在上一步中实现的安装类的方法。要将安装文件夹的名称传递给安装类,请突出显示“安装自定义操作”下的“主要输出”项,然后在属性编辑器中,将 /AppLocation="[TARGETDIR]\" 粘贴为 CustomActionData 属性的值。
  9. 以上就是创建 ASP.NET 应用程序安装程序的必要步骤。现在,您可以进行生成,并通过右键单击您的安装项目并选择“安装”来运行测试安装。安装完成后,从“开始”菜单运行 Cassini Explorer,在注册的 Cassini 应用程序中查看您的应用程序。在进行下一次生成之前,请卸载您的产品。

    请记住,Visual Studio .NET 安装项目在尝试在产品已安装的情况下进行生成时,其“检测到的依赖项”可能会出现问题。在进行下一次生成之前,请勿忘记卸载您的产品。如果您在产品已安装的情况下进行了生成,请卸载产品,然后右键单击“检测到的依赖项”并选择“刷新依赖项”。

    以下几步是可选的。它们描述了如何为目标系统上的应用程序创建“开始”菜单快捷方式。

  10. 通过将 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 应该会启动您的应用程序。在进行下一次生成尝试之前,请不要忘记卸载产品。

  11. 要创建实际指向 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 应用程序。

现在,您可以调整安装项目选项,使其反映您的产品和公司标识。

© . All rights reserved.