在 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 專案
開啟 Visual Studio 並建立新的專案。
選擇 Windows Forms 應用程式 (.NET Framework) 或 WPF 應用程式 (.NET Framework) 專案範本,並將專案
CmdLineDemo命名為 。從 [建置] 功能表中,選取 [發佈] 命令。
此步驟可確保專案已正確設定為產生 ClickOnce 應用程式部署。
「發佈精靈」隨即出現。
在 [發佈精靈] 中,選取 [完成]。
Visual Studio 會產生並顯示預設網頁,稱為 Publish.htm。
儲存您的專案,並記下儲存專案的資料夾位置。
上述步驟會建立第一次發佈的 ClickOnce 專案。 現在,您可以在 IDE 外部重現組建。
從命令列重現組建
結束 Visual Studio。
從 Windows 的 [開始] 功能表中,選取 [ 工具] [命令>列>] [開發人員命令提示字元]。
Visual Studio 開發人員命令提示字元隨即開啟。
在 Visual Studio 命令提示字元中,請確定目前目錄顯示您先前建置之專案的位置。
如果您未在專案目錄中工作,請輸入指令以變更至所需位置,例如
chdir C:\Users\username\source\repos\CmdLineDemo。若要移除 上一節中產生的現有檔案,請輸入
rmdir /s publish。此步驟是選擇性的,但它可確保命令列建置產生所有新檔案。
輸入
msbuild /target:publish。上述步驟會在專案名為 Publish 的子資料夾中產生完整的 ClickOnce 應用程式部署。 CmdLineDemo.application 是 ClickOnce 部署資訊清單。 資料夾 CmdLineDemo_1.0.0.0 包含 CmdLineDemo.exe 和 CmdLineDemo.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 中發佈到的位置。 如果未同時指定InstallUrl和UpdateUrl屬性,則會將該內容插入至 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。 |