共用方式為


從命令列建置 ClickOnce 應用程式

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

備註

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

使用 MSBuild 重現 .NET Framework 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 應用程式 (.NET Framework)WPF 應用程式 (.NET Framework) 專案範本,並將專案 CmdLineDemo命名為 。

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

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

    「發佈精靈」隨即出現。

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

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

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

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

從命令列重現組建

  1. 結束 Visual Studio。

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

    Visual Studio 開發人員命令提示字元隨即開啟。

  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.exeCmdLineDemo.exe.manifest 的檔案,即 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。 您可以在 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 位置。

發佈屬性

當您使用上述程式發佈應用程式時,發佈精靈會將下列屬性插入您的專案檔案中。 這些屬性會直接影響 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"。網際網路和內部區域網路會使預設權限集被發送到 ClickOnce 應用程式資訊清單中。 LocalIntranet是預設值,基本上就是完全信任的意思。 自訂指定只有在基底 app.manifest 檔案中明確指定的許可權才會發出至 ClickOnce 應用程式資訊清單。 app.manifest 檔案是部分資訊清單檔案,僅包含信任資訊定義。 這是一個隱藏檔案,當您在 「安全性 」頁面上設定權限時,會自動新增至您的專案。

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

  • PublishUrl 是應用程式在 IDE 中發佈到的位置。 如果未同時指定 InstallUrlUpdateUrl 屬性,則會將該內容插入至 ClickOnce 應用程式資訊清單中。

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

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

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

  • InstallUrl (未顯示) 是使用者安裝應用程式的位置。 如果指定,則如果已啟用屬性,則此值會燒錄到 IsWebBootstrapper 啟動載入器中。 未指定 UpdateUrl 時,應用程式資訊清單中也會插入它。

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

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

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

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

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

  • UpdateIntervalUnits 指定 UpdateInterval 值使用小時、天或週作為單位。

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