依您選擇的設定變更 ClickOnce 設定(僅限 .NET 框架版本)

更新頁 :
頁面創建日期 :

環境

框架
  • Windows Forms (.NET Framework) 全般
  • WPF (.NET Framework) 全般

前提

此提示的內容是 .NET 框架的項目假設。 對於 .NET(核心),您可以在生成配置單元中設置 ClickOnce 的發佈設置,以便像往常一樣發佈。

它還假定您具有使用 ClickOnce 的常識。

入門

.NET 框架專案只能有一個 ClickOnce 發佈設置。 例如,若要在調試和發佈生成中使用不同的設置發佈,必須每次都手動更改設置,然後發佈它們。

您可以將專案分組到 DLL 中,並創建兩個單獨的專案進行發佈,以便有兩個設置。 您將有兩個類似的設置,如果發佈所需的資源檔,則管理起來很麻煩,因為您必須有兩個資源檔。

本節介紹如何根據需要創建任意數量的批處理檔 (.bat) 併發出 ClickOnce。

按兩下開啟設置

這一次,“公共資料夾位置”和“安裝資料夾 URL”在“調試生成”和“發佈生成”中分開。 使用共同策略創建其他設置。 可以單獨設置其他參數,但單獨設置應用程式檔或先決條件可能很麻煩。

首先,打開專案,像往常一樣輸入 ClickOnce 設置。 輸入的內容是 Debug 發出的參數,但除了公共部分之外,只要沒有錯誤,就沒有問題。

下面是一個配置範例。

完成後,保存專案。

為 ClickOnce 發佈建立 .bat 檔

由於它由命令發出,因此可以在其他媒體(如 PowerShell)中運行,但這次我們將使用 BAT 檔創建它。

無論檔位於何處,都可以創建該檔,但這次,為了簡化描述,我們將在解決方案檔 (.sln) 的位置創建該檔。 由於它是一個 BAT 檔,因此字元代碼為 Shift-JIS。 PS1 可以是UTF-8(BOM)。

在文字編輯器中打開 BAT 檔,然後鍵入以下內容(例如): 請注意,對於 PowerShell,轉義過程可能不同。

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"

第一行指向開發人員命令提示符的位置。 此路徑取決於您安裝的視覺工作室版本。

路徑的每個部分都取決於以下條件:

Program Files
路徑 條件
Program Files
  • 如果您使用的是32位作業系統
  • 如果您在 64 位作業系統上使用 64 位版本的 Visual 工作室
Program Files (x86)
  • 如果您在 64 位作業系統上使用 32 位版本的 Visual 工作室
2022
這取決於您安裝的視覺工作室版本。
Community
這取決於您安裝的視覺工作室版本。 包括「Community」、“專業版”和“企業”。

第二行將當前目錄移動到 BAT 檔所在的位置。

第三行是 ClickOnce 產生處理命令。 每個參數的含義如下:

參數名稱 說明
msbuild 執行生成過程的命令。 這是必填項,也是第一個。
ClickOnceBuildConfiguration.sln 描述要生成的解決方案檔名。
/t:Publish 指示它是 ClickOnce 生成過程。
/p:Configuration=Debug 指定解決方案中設置的生成配置。 如果要更改要生成的調試配置,請更改調試部分的文本。
/p:PublishUrl="publish\Debug\\" 使用指定的字串覆蓋 Visual Studio 發佈螢幕上的「公共資料夾位置」 值。
/p:InstallUrl="\\xxxxServer\publish_Debug\\" 使用指定的字串覆蓋 Visual Studio 發佈螢幕上的「安裝資料夾 URL」 值。

我們摘錄了一些參數,但有關其他參數,請參閱下面的著陸頁。

作為範例,我們將更改調試和發佈生成中的 ClickOnce 發佈參數,如下所示:

ClickOnceDebug發行.bat

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"

ClickOnceRelease發行.bat

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Release /p:PublishUrl="publish\Release\\" /p:InstallUrl="\\xxxxServer\publish_Release\\"

ClickOnce 發行 BAT 檔執行

嘗試運行每個 BAT 檔。

命令提示符將啟動並啟動生成。

事實上,由於 BAT 檔僅生成,因此不會在「公共資料夾位置」中創建該檔。 您已經建立了發佈所需的檔案。 例如,在調試生成中,檔應位於“<項目資料夾路徑>\bin_調試\app.publish_”中。 將這些檔複製到安裝資料夾URL將正確充當 ClickOnce。

發佈到公共資料夾位置(如果發行者是可直接存取的資料夾)

此部分由以下網站提供參考。

此處與 ClickOnce 處理沒有直接關係,因此請參考上述網站進行詳細說明。

首先,在文本編輯器中打開專案檔 (.csproj)。 它不是解決方案檔。

內容是 XML 結構,您可以滾動 </Project> 到底部,因此請在上面的行中添加以下代碼。 如果處理檔複製假設,則內容是固定的,但 CopyPublishedApplication 部分是可選的。 稍後我們將使用此名稱。

<!-- ここから ClickOnce の発行処理 -->
<Target Name="CopyPublishedApplication">
  <ItemGroup>
    <MySourceFiles Include="$(PublishDir)**\*.*" Exclude="$(PublishDir)$(AssemblyName).exe" />
  </ItemGroup>
  <PropertyGroup>
    <AppricationDir>$(_DeploymentApplicationDir.Substring($(PublishDir.Length)))</AppricationDir>
  </PropertyGroup>
  <Copy SourceFiles="@(MySourceFiles)" DestinationFiles="@(MySourceFiles->'$(PublishUrl)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<!-- ここまで ClickOnce の発行処理 -->

鍵入後保存。

然後打開每個 BAT 檔,並將 添加到 msbuild 參數 /t:CopyPublishedApplication 中。 CopyPublishedApplication 是您剛才提供的名稱。

ClickOnceDebug發行.bat (例)

call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /t:CopyPublishedApplication /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"

運行 BAT 檔時,可以驗證該檔案是否複製到「公共資料夾位置」。 此時<沒有程式名稱>.exe檔,但不需要該文件,因為它最初包含在 setup.exe 中。

補充

如果解決方案中有多個專案,則對所有項目 CopyPublishedApplication 執行 。 在大多數情況下,它僅設置為 exe 專案,因此當 在其他項目中 CopyPublishedApplication 運行 時,將顯示錯誤。 您可以安全地忽略它,因為它只顯示一條消息。

發佈到公共資料夾位置(對於 FTP)

我還沒有嘗試過,但最好參考以下網站。

其他注意事項