Share via


从命令行生成 .NET ClickOnce 应用程序

在 Visual Studio 中,可以从命令行生成项目,即使它们是在集成开发环境 (IDE) 中创建的。 事实上,可以在另一台仅安装了 .NET 5 或更高版本的计算机上重新生成使用 Visual Studio 创建的项目。 通过此功能,可使用自动化过程(例如在中心生成实验室)或超出生成项目本身范围的高级脚本编写技术来重现生成。

注意

若要从命令行生成 .NET Framework ClickOnce 应用程序,请参阅从命令行生成 ClickOnce 应用程序

使用 MSBuild 重现 .NET ClickOnce 应用程序部署

在命令行中调用 msbuild /target:publish 时,此命令将指示 MSBuild 系统生成项目并在发布文件夹中创建 ClickOnce 应用程序。 该命令相当于在 IDE 中选择“Publish”命令。

此命令执行位于 Visual Studio 命令提示符环境中路径上的 msbuild.exe。

“目标”是指示 MSBuild 如何处理命令的指示器。 关键目标是“生成”目标和“发布”目标。 生成目标相当于在 IDE 中选择“生成”命令(或按 F5)。 如果你只想生成项目,可以输入 msbuild。 此命令有效,因为生成目标是由 Visual Studio 生成的所有项目的默认目标。 因此,无需显式指定生成目标。 因此,输入 msbuild 的效果与输入 msbuild /target:build 相同。

/target:publish 命令指示 MSBuild 调用发布目标。 发布目标取决于生成目标,这意味着发布操作是生成操作的超集。 例如,如果对 Visual Basic 或 C# 源文件进行了更改,则发布操作将自动重新生成相应的程序集。

有关如何使用 Mage.exe 命令行工具生成完整 ClickOnce 部署以创建 ClickOnce 清单的信息,请参阅演练:手动部署 ClickOnce 应用程序

使用 MSBuild 创建和生成基本的 ClickOnce 应用程序

创建发布配置文件的最简单方法是使用 Visual Studio。 需要发布配置文件才可使用 MSBuild 发布。

创建和发布 ClickOnce 项目

  1. 打开 Visual Studio 并创建一个新项目。

    选择“Windows 窗体应用”或“WPF 应用程序”项目模板并将项目命名为 CmdLineDemo,然后创建项目。

  2. 在解决方案资源管理器中右键单击该项目,然后选择“发布”

    此步骤可确保正确配置项目以生成 ClickOnce 应用程序部署。

    “发布”页面随即显示。

  3. 在“发布”页中,依次选择“添加发布配置文件”、“ClickOnce”、“完成”。

    对于本练习,可以忽略“发布”页上的其他配置设置。

  4. 该过程完成后,选择“关闭”退出“发布”页对话框。

  5. 选择“发布”。

    Visual Studio 生成 ClickOnce 部署输出。

  6. 保存项目,并记下存储该项目的文件夹位置。

    前述步骤创建了一个首次发布的 ClickOnce 项目。 现在可以在 IDE 之外重现生成。

从命令行重现生成

  1. 退出 Visual Studio。

  2. 在 Windows 的“开始”菜单中,选择“工具”>“命令行”>“开发人员命令提示”

    Visual Studio 开发人员命令提示随即打开。

  3. 在“Visual Studio 命令提示”中,确保当前目录显示先前生成的项目的位置。

    如果你不在项目目录中操作,请输入切换到所需位置的命令,例如 chdir C:\Users\username\source\repos\CmdLineDemo

  4. 若要移除上一部分中生成的现有文件,请输入 rmdir /s publish

    此步骤是可选步骤,但它确保命令行生成会生成所有的新文件。

    对于 .NET 5 及更高版本,从命令行生成 .NET ClickOnce 应用程序的体验与此类似。 一个差别是,需要在 MSBuild 命令行中为发布配置文件提供一个额外的属性。

  5. 输入 msbuild /target:publish /p:PublishProfile=<pubxml file> /p:PublishDir="<specific location>"

    前述步骤将在名为 publish 的项目子文件夹中生成完整的 ClickOnce 应用程序部署。 CmdLineDemo.application 是 ClickOnce 部署清单。 文件夹 CmdLineDemo_1.0.0.0 包含文件 CmdLineDemo.exe 和 CmdLineDemo.exe.manifest(即 ClickOnce 应用程序清单)。 Setup.exe 是引导程序,默认配置为安装 .NET。 此文件夹中的文件包含通过 Web、UNC 或 CD/DVD 部署应用程序所需的整个文件集。

注意

MSBuild 系统使用 PublishDir 选项指定输出位置,例如 msbuild /t:publish /p:PublishProfile=<pubxml file> /p:PublishDir="<specific location>"

发布进程输出

MSBuild 使用 PublishDir 属性设置生成输出位置,包括生成工件。 默认情况下,MSBuild 用作发布目标的 PublishDir 值是从 .pubxml 文件 (.NET) 中的 PublishDir 属性获取的。 你还可以使用 /p 开关在 MSBuild 命令行中重写此行为。 如果替代该设置,发布输出将转到指定的位置。 输出在发布的 MSBuild 步骤期间生成。 任何带有 AfterTargets="ClickOncePublish" 的 MSBuild 目标都将在创建此副本后运行。

PublishDir 不同,PublishUrl 属性不用于 MSBuild 步骤。 从命令行直接调用 MSBuild 进行发布时,PublishUrl 将被忽略。

在 Visual Studio IDE 中启动发布时,Visual Studio 调用 MSBuild 将项目发布到 PublishDir 位置。 完成此 MSBuild 步骤后,Visual Studio 将特定于 ClickOnce 的文件发布到 PublishUrl 指向的位置。 第二个步骤在 Visual Studio 进程中运行。 无法在此步骤中注入任何要运行的目标/任务,因为它是 Visual Studio 进程。

对于不使用 Visual Studio 的 MSBuild 部署,请将部署目录中的所有文件复制到部署目标或介质。 该部署目录可以是网站或 FTP 站点上的文件夹、文件共享或 CD-ROM。 例如,可以使用第三方工具或自定义 MSBuild 任务来复制 ClickOnce 文件。

对于 PublishUrl 文件夹中的任何后期处理,需要有一个单独的脚本。

重要

如果 PublishDir 设置为与 PublishUrl 相同的位置,则重复的编译输出将复制到 PublishUrl 位置。 可以通过新建配置文件,在 Visual Studio 2022 版本 17.4 及更高版本中避免此问题。 新配置文件将 PublishDir 设置为与 PublishUrl 不同的位置。 发布操作结束时,相关的 ClickOnce 文件将从 PublishDir 复制到 PublishUrl 位置。

发布属性

在使用前述过程中发布应用程序时,以下属性将被插入到 .NET 项目(.NET 5 及更高版本)的发布配置文件中。 这些属性直接影响 ClickOnce 应用程序的生成方式。

在 .pubxml 中:

<AssemblyOriginatorKeyFile>WindowsApplication3.snk</AssemblyOriginatorKeyFile>
<GenerateManifests>true</GenerateManifests>
<TargetZone>LocalIntranet</TargetZone>
<PublisherName>Microsoft</PublisherName>
<ProductName>CmdLineDemo</ProductName>
<PublishUrl>http://localhost/CmdLineDemo</PublishUrl>
<Install>true</Install>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<ApplicationRevision>1</ApplicationRevision>
<UpdateEnabled>true</UpdateEnabled>
<UpdateRequired>false</UpdateRequired>
<UpdateMode>Foreground</UpdateMode>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

可在命令行中替代这些属性,而无需更改项目文件本身。 例如,以下代码将在没有引导程序的情况下生成 ClickOnce 应用程序部署:

msbuild /target:publish /p:PublishProfile=<pubxml file> /property:BootstrapperEnabled=false

发布属性在 Visual Studio 中通过“项目设计器”的“发布”、“安全性”和“签名”属性页控制。 对于 .NET 项目(.NET 5 及更高版本),这些设置在 pubxml 文件中提供,你可以使用“发布”工具在 Visual Studio 中访问该文件。

以下发布属性是在应用程序设计器的各个属性页中设置的。

  • AssemblyOriginatorKeyFile 确定用于对 ClickOnce 应用程序清单进行签名的密钥文件。 也可使用此同一密钥为程序集分配一个强名称。 此属性是在“项目设计器”的“签名”页面上设置的 。 对于 .NET windows 应用程序,此设置保留在项目文件中。

在“发布”页面上设置了以下属性:

  • PublishUrl 是应用程序将在 IDE 中发布到的位置。 如果未同时指定 InstallUrlUpdateUrl 属性,则会将其插入到 ClickOnce 应用程序清单中。

  • ApplicationVersion 指定 ClickOnce 应用程序的版本。 版本是一个四位数的数字。 如果最后一位数字是“*”(星号),则 ApplicationRevision 将替换为在生成时插入清单的值。

  • ApplicationRevision 指定修订版本。 该值是一个整数,每次在 IDE 中发布时都会递增。 请注意,对于在命令行上执行的生成,它不会自动递增。

  • Install 确定应用程序是已安装的应用程序还是从 Web 运行的应用程序。

  • InstallUrl(未显示)是用户安装应用程序的位置。 如果指定了此属性,则在启用了 IsWebBootstrapper 属性的情况下,会将该属性的值记录到 setup.exe 引导程序中。 如果未指定 UpdateUrl,它也会插入到应用程序清单中。

  • SupportUrl(未显示)是已安装应用程序的“添加/删除程序”对话框中链接的位置。

以下属性在“应用程序更新”对话框中设置,可从“发布”页面访问 。

  • UpdateEnabled 指示应用程序是否应检查更新。

  • UpdateMode 指定前台更新。 对于 .NET 项目(.NET 5 及更高版本),不支持 Background。

  • UpdateUrl(未显示)是应用程序接收更新的位置。 如果指定了该属性,该属性的值将插入到应用程序清单中。

以下属性在“发布选项”对话框中设置,可从“发布”页面访问 。

  • PublisherName 指定安装或运行应用程序时系统显示的提示中所示的发布者名称。 对于已安装的应用程序,该属性还用于在“开始”菜单上指定文件夹名称

  • ProductName 指定在安装或运行应用程序时系统显示的提示中所示的产品名称。 对于已安装的应用程序,该属性还用于在“开始”菜单上指定快捷方式名称

以下属性在“先决条件”对话框中设置,可从“发布”页面访问 。

  • BootstrapperEnabled 确定是否生成 setup.exe 引导程序。

  • IsWebBootstrapper 确定 setup.exe 引导程序是通过 Web 还是在基于磁盘的模式下工作。

使用选项:InstallURL、SupportUrl、PublishURL、UpdateURL

下表显示了用于 ClickOnce 部署的四个 URL 选项。

URL 选项 说明
PublishURL 需要将 ClickOnce 应用程序发布到网站。
InstallURL 可选。 如果安装站点与 PublishURL 不同,请设置此 URL 选项。 例如,可以将 PublishURL 设置为 FTP 路径并将 InstallURL 设置为 Web URL。
SupportURL 可选。 如果支持站点与 PublishURL 不同,请设置此 URL 选项。 例如,可以将 SupportURL 设置为公司的客户支持网站。
UpdateURL 可选。 如果更新位置与 InstallURL 不同,请设置此 URL 选项。 例如,可以将 PublishURL 设置为 FTP 路径并将 UpdateURL 设置为 Web URL。