共用方式為


從命令列建置 .NET ClickOnce 應用程式

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

備註

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

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

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

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

「目標」是 MSBuild 如何處理命令的指標。 關鍵目標是「建置」目標和「發佈」目標。 建置目標相當於在 IDE 中選取 [建置] 命令 (或按 F5)。 如果您只想建立專案,可以輸入 msbuild。 此命令可運作,因為建置目標是 Visual Studio 所產生之所有專案的預設目標。 因此,您不需要明確指定建置目標。 因此,進入 msbuild 與進入 msbuild /target:build是相同的操作。

MSBuild 的命令 /target:publish 用來執行發佈目標。 發佈目標取決於建置目標,這表示發佈作業是建置作業的超集。 例如,如果您對 Visual Basic 或 C# 來源檔案進行了變更,發佈作業會自動重建對應的元件。

如需取得有關使用 Mage.exe 命令列工具建立 ClickOnce 形式檔,以產生完整的 ClickOnce 部署的資訊,請參閱 逐步解說:手動部署 ClickOnce 應用程式

使用 MSBuild 建立和建置基本 ClickOnce 應用程式

建立發佈設定檔的最簡單方式是使用 Visual Studio。 需要發佈設定檔才能使用 MSBuild 發佈。

建立和發佈 ClickOnce 專案

  1. 開啟 Visual Studio 並建立新的專案。

    選擇 [Windows Forms 應用程式 ] 或 [WPF 應用程式 ] 專案範本,並將專案 CmdLineDemo命名為 ,然後建立專案。

  2. 以滑鼠右鍵按一下 [方案總管] 中的專案,然後選取 [發佈]。

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

    此 Publish 頁面隨即顯示。

  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.exeCmdLineDemo.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 用作發佈目的地的值預設是從在 .pubxml檔案(.NET)中的屬性取得。 您也可以在 MSBuild 命令列上使用/p參數來覆寫此行為。 如果您覆寫設定,發佈輸出會移至指定的位置。 輸出會在 MSBuild 發佈步驟期間產生。 建立此複本後,具有 AfterTargets="ClickOncePublish" 的任何 MSBuild 目標都會執行。

屬性 PublishUrl 不同於 PublishDir,不會在 MSBuild 步驟中使用。 PublishUrl 當您直接叫用 MSBuild 從命令列發佈時,會忽略。

在 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 啟動載入器中。 未指定 UpdateUrl 時,應用程式資訊清單中也會插入它。

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

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

  • UpdateEnabled 指出應用程式是否應該檢查更新。

  • UpdateMode 指定前台更新。 針對 .NET 專案 (.NET 5 和更新版本),不支援背景。

  • UpdateUrl (未顯示) 是應用程式接收更新的位置。 如果指定,則會將此值插入應用程式資訊清單中。

下列屬性是在「 發佈選項 」對話方塊中設定的,可從 「發佈」 頁面存取。

  • PublisherName 指定安裝或執行應用程式時顯示的提示中顯示的發行者名稱。 對於已安裝的應用程序,它也用於在 [ 開始] 功能表上指定資料夾名稱。

  • ProductName 指定安裝或執行應用程式時顯示的提示中顯示的產品名稱。 對於已安裝的應用程序,它也用於在 [ 開始] 功能表上指定快捷方式名稱。

下列屬性是在 [ 先決條件 ] 對話方塊中設定,可從 [發佈] 頁面存取。

  • BootstrapperEnabled 決定是否要產生 setup.exe 啟動載入器。

  • IsWebBootstrapper 判斷 setup.exe 啟動載入器是透過 Web 或磁碟模式運作。

使用選項:InstallURL、SupportUrl、PublishURL、UpdateURL

下表顯示 ClickOnce 部署的四個 URL 選項。

URL 選項 Description
PublishURL 需要將 ClickOnce 應用程式發佈至網站。
InstallURL 選擇性。 請設定此 URL 選項,如果安裝站點不同於 PublishURL。 例如,您可以將 設定 PublishURL 為 FTP 路徑,並將 設定為 InstallURL Web URL。
SupportURL 選擇性。 如果支援網站不同於PublishURL,請設置此 URL 選項。 例如,您可以將 SupportURL 設定為貴公司的客戶支援網站。
UpdateURL 選擇性。 如果更新位置與InstallURL不同,請設置此 URL 選項。 例如,您可以將 設定 PublishURL 為 FTP 路徑,並將 設定為 UpdateURL Web URL。