從命令列建置 .NET ClickOnce 應用程式
在 Visual Studio 中,您可以從命令列組建專案,即使這些專案是在整合式開發環境 (IDE) 中建立也一樣。 事實上,您可以在僅安裝 .NET 5 或更新版本的另一部電腦上重建以 Visual Studio 建立的專案。 此功能可讓您使用自動化程序來重現組建,例如,在中央建置實驗室中,或使用超越建置專案本身範圍的進階指令碼技術。
注意
若要從命令列建置 .NET Framework ClickOnce 應用程式,請參閱從命令列建置 ClickOnce 應用程式。
使用 MSBuild 重現 .NET 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 專案
開啟 Visual Studio 並建立新專案。
選擇 Windows Forms 應用程式或 WPF 應用程式專案範本,並將專案命名為
CmdLineDemo
,然後建立專案。在 [方案總管] 中的專案上按一下滑鼠右鍵,然後選取 [發佈]。
此步驟可確保專案已正確設定以產生 ClickOnce 應用程式部署。
[發佈] 頁面隨即出現。
在 [發佈] 頁面中,選取 [新增發行設定檔],選擇 [ClickOnce],然後選取 [完成]。
在此練習中,您可以忽略 [發佈] 頁面上的其他組態設定。
程序完成之後,選取 [關閉] 以結束 [發佈] 頁面對話方塊。
選取發行。
Visual Studio 會產生 ClickOnce 部署輸出。
儲存您的專案,並記下其儲存所在的資料夾位置。
上述步驟會建立第一次發佈的 ClickOnce 專案。 現在您可以在 IDE 外部重現組建。
從命令列重現組建
結束 Visual Studio。
從 Windows [開始] 功能表中,選取 [工具]> [命令列]> [開發人員命令提示字元]。
開啟 Visual Studio Developer 開發人員命令提示字元:
在 [Visual Studio 命令提示字元] 中,確定目前目錄會顯示您先前組建的專案位置。
如果您未在專案目錄中作業,請輸入要變更為所需位置的命令,例如
chdir C:\Users\username\source\repos\CmdLineDemo
。若要移除上一節中產生的現有檔案,請輸入
rmdir /s publish
。此步驟是選用,但可確保命令列組建產生所有新的檔案。
針對 .NET 5 和更新版本,從命令列建置 .NET ClickOnce 應用程式是類似的體驗。 其中一個差異在於您必須在 MSBuild 命令列上為發行設定檔提供一個額外的屬性。
輸入
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.資訊清單、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 目標都會在建立此複本之後執行。
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
位置。
發佈屬性
當您使用先前的程序發佈應用程式,下列屬性會插入至 .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 中的目標位置。 如果未指定InstallUrl
和UpdateUrl
屬性,則會插入 ClickOnce 應用程式資訊清單中。ApplicationVersion
指定 ClickOnce 應用程式的版本。 版本是四位數的數字。 如果最後一個數字是 "*" (星號),則ApplicationRevision
會取代在建置時間插入資訊清單中的值。ApplicationRevision
指定修訂。 這個值是整數,每次您在 IDE 中發佈時都會遞增。 請注意,針對在命令列執行的組建,它不會自動遞增。Install
判斷應用程式是已安裝的應用程式,還是從 Web 執行的應用程式。InstallUrl
(未顯示) 是使用者將從中安裝應用程式的位置。 如果指定,如果已啟用IsWebBootstrapper
屬性,這個值就會燒錄至 setup.exe 啟動載入器。 如果未指定UpdateUrl
,則也會插入應用程式資訊清單中。SupportUrl
(未顯示) 是已安裝應用程式的 [新增/移除程式] 對話方塊中連結的位置。
下列屬性會設定在 [應用程式更新] 對話方塊中,從 [發佈] 頁面存取。
UpdateEnabled
表示應用程式是否應該檢查更新。UpdateMode
指定 Foreground 更新。 針對 .NET 專案 (.NET 5 和更新版本),不支援背景。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。 |