Build ClickOnce applications from the command line (從命令列建置 ClickOnce 應用程式)

在 Visual Studio 中,您可以從命令列組建專案,即使這些專案是在整合式開發環境 (IDE) 中建立也一樣。 事實上,您可以在只安裝 .NET Framework 的另一部電腦上重建以 Visual Studio 建立的專案。 此功能可讓您使用自動化程序來重現組建,例如,在中央建置實驗室中,或使用超越建置專案本身範圍的進階指令碼技術。

注意

若要從命令列建置 .NET ClickOnce 應用程式,請參閱從命令列建置 .NET ClickOnce 應用程式

使用 MSBuild 重現 .NET Framework ClickOnce 應用程式部署

當您在命令列叫用 msbuild /target:publish,此命令會指示 MSBuild 系統建置專案,並在 publish 資料夾中建立 ClickOnce 應用程式。 此命令相當於在 IDE 中選取 [發佈] 命令。

此命令會執行 msbuild.exe,其位於 Visual Studio 命令提示字元環境中的路徑上。

「目標」是 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 Forms 應用程式 (.NET Framework)WPF 應用程式 (.NET Framework) 專案範本,並將專案命名為 CmdLineDemo

  2. 從 [組建] 功能表中,選取 [發佈] 命令。

    此步驟可確保專案已正確設定以產生 ClickOnce 應用程式部署。

    [發行精靈] 隨即出現。

  3. 在發佈精靈中,選取 [完成]

    Visual Studio 會產生並顯示預設網頁,稱為 Publish.htm

  4. 儲存您的專案,並記下其儲存所在的資料夾位置。

    上述步驟會建立第一次發佈的 ClickOnce 專案。 現在您可以在 IDE 外部重現組建。

從命令列重現組建

  1. 結束 Visual Studio。

  2. 從 Windows [開始] 功能表中,選取 [工具]> [命令列]> [開發人員命令提示字元]

    開啟 Visual Studio Developer 開發人員命令提示字元:

  3. [Visual Studio 命令提示字元] 中,確定目前目錄會顯示您先前組建的專案位置。

    如果您未在專案目錄中作業,請輸入要變更為所需位置的命令,例如 chdir C:\Users\username\source\repos\CmdLineDemo

  4. 若要移除上一節中產生的現有檔案,請輸入 rmdir /s publish

    此步驟是選用,但可確保命令列組建產生所有新的檔案。

  5. 輸入 msbuild /target:publish

    上述步驟會在名為 Publish 的專案子資料夾中產生完整的 ClickOnce 應用程式部署。 CmdLineDemo.application 是 ClickOnce 部署資訊清單。 資料夾 CmdLineDemo_1.0.0.0 包含檔案 CmdLineDemo.exe CmdLineDemo.exe.資訊清單、ClickOnce 應用程式資訊清單。 Setup.exe 是啟動載入器,預設會設定為安裝 .NET Framework。 DotNetFX 資料夾包含 .NET Framework 的可轉散發檔案。 此位置中的檔案包含透過 Web 或 UNC 或 CD/DVD 部署應用程式所需的整個檔案集。

注意

MSBuild 系統會使用 PublishDir 選項來指定輸出的位置,例如 msbuild /t:publish /p:PublishDir="<specific location>"

發佈處理旭輸出

MSBuild 會使用 PublishDir 屬性來設定組建輸出位置,包括組建成品。 MSBuild 使用做為發行目的地的 PublishDir 值預設會從專案檔 (.NET Framework) 中的 PublishDir 屬性取得。 您可以使用 /p 參數,在 MSBuild 命令列上覆寫此行為。 如果您覆寫設定,發佈輸出會移至指定的位置。 輸出會在發佈的 MSBuild 步驟期間產生。 任何具有 AfterTargets="ClickOncePublish" 的 MSBuild 目標都會在建立此複本之後執行。

PublishUrl 屬性不同於 PublishDir,不會用於 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 位置。

發佈屬性

當您在上述程序中發佈應用程式時,[發佈精靈] 會將下列屬性插入您的專案檔中。 這些屬性會直接影響 ClickOnce 應用程式的產生方式。

CmdLineDemo.vbproj / CmdLineDemo.csproj中:

<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>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

針對 .NET Framework 專案,您可以在命令列覆寫這些屬性,而不需要變更專案檔本身。 例如,下列程式碼建置 ClickOnce 應用程式部署,而不需要啟動程序:

msbuild /target:publish /property:BootstrapperEnabled=false

發佈屬性會從 [專案設計工具][發佈][安全性][簽署] 屬性頁面,在 Visual Studio 中受控制。

下列發佈屬性會設定在應用程式設計工具的各種屬性頁面中。

  • AssemblyOriginatorKeyFile 會決定用來簽署 ClickOnce 應用程式資訊清單的金鑰檔。 此相同的金鑰也可以用來將強式名稱指派給您的組件。 此屬性會在 [專案設計工具][簽署] 頁面上設定。

下列屬性會在 [安全性] 頁面上設定:

  • 啟用 ClickOnce 安全性設定 會決定是否產生 ClickOnce 資訊清單。 初始建立專案時,ClickOnce 資訊清單產生預設為關閉。 當您第一次發佈時,精靈會自動開啟此旗標。

  • TargetZone 會決定要發出至 ClickOnce 應用程式資訊清單的信任層級。 可能的值為 "Internet"、"LocalIntranet" 和 "Custom"。Internet 和 LocalIntranet 會導致預設權限集發出到 ClickOnce 應用程式資訊清單中。 LocalIntranet 是預設值,基本上表示完全信任。 自訂指定只有在基底 app.manifest 檔案中明確指定的權限才會發出到 ClickOnce 應用程式資訊清單中。 app.manifest 檔案是部分資訊清單檔,只包含信任資訊定義。 這是隱藏的檔案,當您在 [安全性] 頁面上設定權限時,會自動新增至您的專案。

下列屬性會在 [發佈] 頁面上設定:

  • PublishUrl 是發佈應用程式到 IDE 中的目標位置。 如果未指定 InstallUrlUpdateUrl 屬性,則會插入 ClickOnce 應用程式資訊清單中。

  • ApplicationVersion 指定 ClickOnce 應用程式的版本。 版本是四位數的數字。 如果最後一個數字是 "*" (星號),則 ApplicationRevision 會取代在建置時間插入資訊清單中的值。

  • ApplicationRevision 指定修訂。 這個值是整數,每次您在 IDE 中發佈時都會遞增。 請注意,針對在命令列執行的組建,它不會自動遞增。

  • Install 判斷應用程式是已安裝的應用程式,還是從 Web 執行的應用程式。

  • InstallUrl (未顯示) 是使用者將從中安裝應用程式的位置。 如果指定,如果已啟用 IsWebBootstrapper 屬性,這個值就會燒錄至 setup.exe 啟動載入器。 如果未指定 UpdateUrl,則也會插入應用程式資訊清單中。

  • SupportUrl (未顯示) 是已安裝應用程式的 [新增/移除程式] 對話方塊中連結的位置。

下列屬性會設定在 [應用程式更新] 對話方塊中,從 [發佈] 頁面存取。

  • UpdateEnabled 表示應用程式是否應該檢查更新。

  • UpdateMode 指定前景更新或背景更新。

  • UpdateInterval 指定應用程式應檢查更新的頻率。

  • UpdateIntervalUnits 指定 UpdateInterval 值是以小時、天或週為單位。

  • 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。