dotnet publish -p:PublishProfile=FolderProfile
上述範例使用位於 <project_folder>/Properties/PublishProfiles 資料夾中的 FolderProfile.pubxml 檔案。 如果您在設定 PublishProfile
屬性時指定路徑和副檔名,則會忽略它們。 根據預設,MSBuild 會查看 Properties/PublishProfiles 資料夾,並採用 pubxml 副檔名。 若需指定路徑和包括副檔名在內的檔案名稱,請不要設定 PublishProfile
屬性,改為設定 PublishProfileFullPath
屬性。
在 .pubxml 檔案中:
Visual Studio 會使用 PublishUrl
表示發行目標。
CLI 會使用 PublishDir
表示發行目標。
如果您希望讓案例在所有位置都能運作,可以初始化這兩個屬性,使值與 .pubxml 檔案的相同。 解決 GitHub 問題 dotnet/sdk#20931 後,僅需設定其中一個屬性。
.pubxml 檔案中的部分屬性僅適用於 Visual Studio,且對 dotnet publish
沒有作用。 我們正致力於讓 CLI 與 Visual Studio 的行為更一致。 但有些屬性是 CLI 絕對不會使用的。 CLI 與 Visual Studio 都會執行發行作業的封裝層面,而 dotnet/sdk#29817 計劃新增更多與此相關的支援。 但 CLI 不會執行發佈的部署自動化層面,以及與不支援之相關的屬性。 最值得注意的 .pubxml 屬性不受支援 dotnet publish
,是影響組建的下列屬性:
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
MSBuild 屬性
下列 MSBuild 屬性會變更 dotnet publish
的輸出。
PublishReadyToRun
將應用程式組件編譯為 ReadyToRun (R2R) 格式。 R2R 是一種預先(AOT) 編譯。 如需詳細資訊,請參閱 ReadyToRun 映像。
若要查看可能導致執行階段失敗的遺漏相依性警告,請使用 PublishReadyToRunShowWarnings=true
。
建議您在發行設定檔中指定 PublishReadyToRun
,而不要在命令列上指定。
PublishSingleFile
將應用程式封裝成平台特定的單一檔案可執行檔。 如需單一檔案發佈的詳細資訊,請參閱單一檔案搭配程式設計文件。
建議您在專案檔中指定此選項,而不要在命令列上指定。
PublishTrimmed
發行獨立式可執行檔時,請修剪未使用的程式庫以減少應用程式的部署大小。 如需詳細資訊,請參閱修剪獨立式部署及可執行檔。 自 .NET 6 SDK 起提供。
建議您在專案檔中指定此選項,而不要在命令列上指定。
如需詳細資訊,請參閱下列資源:
MSBuild 命令列參考
Visual Studio 發佈設定檔 (.pubxml) 以進行應用程式部署 ASP.NET Core
dotnet msbuild
工作負載資訊清單下載作業
執行此命令會啟動工作負載公告資訊清單的非同步背景下載。 若此命令完成時下載仍在執行,則會停止下載。 如需詳細資訊,請參閱公告資訊清單。
PROJECT|SOLUTION
要發佈的專案或解決方案。
PROJECT
是 C#、F# 或 Visual Basic 專案檔的路徑與檔案名稱,或包含 C#、F# 或 Visual Basic 專案檔的目錄路徑。 如未指定目錄,系統會將其預設為當前的目錄。
SOLUTION
為解決方案檔案的路徑和檔案名稱 (副檔名為 .sln),或為包含解決方案之目錄的路徑。 如未指定目錄,系統會將其預設為當前的目錄。
--manifest <PATH_TO_MANIFEST_FILE>
指定一或多個目標資訊清單,用以修剪應用程式發行的套件集。 資訊清單檔是 dotnet store
命令輸出的一部分。 若要指定多個資訊清單,請為每個資訊清單新增 --manifest
選項。
--no-build
不會在發佈前建置專案。 選項也會隱含設定 --no-restore
旗標。
--no-dependencies
忽略專案對專案參考,並且只還原根專案。
--nologo
不要顯示程式啟始橫幅或著作權訊息。
--no-restore
執行命令時,不會執行隱含還原。
-o|--output <OUTPUT_DIRECTORY>
指定輸出目錄的路徑。
若未特別指定,系統預設架構相依性可執行檔和跨平台二進位檔為 [project_file_folder]/bin/[configuration]/[framework]/publish/。 若未特別指定,系統預設獨立式可執行檔為 [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/。
在 Web 專案中,如果輸出檔案夾位於專案資料夾中,後續的 dotnet publish
命令會產生巢狀輸出資料夾。 舉例來說,如果專案資料夾為「myproject」,發行輸出資料夾為「myproject/publish」,而您執行 dotnet publish
兩次,第二次執行會將 .config 與 .json 檔案等內容檔案放在 myproject/publish/publish。 若要避免巢狀發行資料夾,請指定不 直接 在專案資料夾下的 publish 資料夾,或從專案中排除 publish 資料夾。 若要排除名為 [publishoutput] 的發行資料夾,請將下列元素新增至 .csproj 檔案中的 PropertyGroup
元素:
<DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
.NET 7.0.200 SDK 和更新版本
如果您在解決方案上執行此命令時指定 --output
選項,則 CLI 將會因輸出路徑語意不清楚而發出警告 (7.0.200 中的錯誤)。 不允許 --output
選項,因為所有已建置專案的所有輸出都會複製至指定的目錄,而這與多目標專案以及具有不同直接和可轉移相依性版本的專案都不相容。 如需詳細資訊,請參閱解決方案層級的 --output
選項不再適用組建相關命令。
.NET Core 3.x SDK 和更新版本
如果您在發行專案時指定了相對路徑,產生的輸出目錄會位於相對的當前工作目錄,而不是專案檔位置。
如果您在發行解決方案時指定了相對路徑,所有專案的全部輸出都會進入相對於當前工作目錄的指定資料夾。 若要將發行輸出移至每項專案的個別資料夾,請使用 msbuild PublishDir
屬性指定相對路徑,不要使用 --output
選項指定。 舉例來說,dotnet publish -p:PublishDir=.\publish
會將每項專案的發行輸出傳送至內含專案檔的資料夾底下的 publish
資料夾。
.NET Core 2.x SDK
如果您在發行專案時指定了相對路徑,產生的輸出目錄會位於相對專案檔位置,而不是當前的工作目錄。
如果您在發行解決方案時指定了相對路徑,則每項專案的輸出會進入相對於專案檔位置的個別目錄。 如果您在發行解決方案時指定了絕對路徑,則所有專案的一切發行輸出都會進入指定資料夾。
--sc|--self-contained [true|false]
使用您的應用程式發佈 .NET 執行時間,因此不需要在目的電腦上安裝執行時間。 若已指定執行階段識別碼,且專案為可執行檔專案 (而非程式庫專案),則預設值為 true
。 如需詳細資訊,請參閱使用 .NET CLI 發佈和發佈 .NET 應用程式。
若使用此選項時沒有指定 true
或 false
,則預設值為 true
。 在此情況下,請勿在 --self-contained
之後立即放置解決方案或專案引數,因為那是 true
或 false
的放置位置。
--no-self-contained
相當於 --self-contained false
。
--source <SOURCE>
在還原作業期間使用的 NuGet 套件來源 URI。
-r|--runtime <RUNTIME_IDENTIFIER>
發行所指定執行階段的應用程式。 如需執行階段識別項 (RID) 清單,請參閱 RID 目錄。 如需詳細資訊,請參閱使用 .NET CLI 發佈和發佈 .NET 應用程式。 如果您採用此選項,也請使用 --self-contained
或 --no-self-contained
。
-v|--verbosity <LEVEL>
設定命令的詳細資訊層級。 允許的值為 q[uiet]
、m[inimal]
、n[ormal]
、d[etailed]
和 diag[nostic]
。 預設為 minimal
。 如需詳細資訊,請參閱LoggerVerbosity。
--use-current-runtime, --ucr [true|false]
在其中一台電腦上,將設定 RuntimeIdentifier
平台可攜式 RuntimeIdentifier
。 這會與需要 RuntimeIdentifier
的屬性 (例如 SelfContained
、PublishAot
、PublishSelfContained
、PublishSingleFile
與 PublishReadyToRun
) 一起隱含執行。 若此屬性設為 False,隱含解析就再也不會執行。
--version-suffix <VERSION_SUFFIX>
定義要取代專案檔案的版本欄位中之星號 (*
) 的版本尾碼。
為當前目錄中的專案建立架構獨立的跨平台二進位檔:
dotnet publish
從 .NET Core 3.0 SDK 開始,此範例也會建立目前平臺 的架構相依可執行檔 。
針對特定執行階段,為當前目錄中的專案建立獨立式可執行檔:
dotnet publish --runtime osx.10.11-x64
RID 必須位於專案檔中。
針對特定平台,為當前目錄中的專案建立架構獨立可執行檔:
dotnet publish --runtime osx.10.11-x64 --self-contained false
RID 必須位於專案檔中。 此範例適用于 .NET Core 3.0 SDK 和更新版本。
針對特定執行階段和目標 Framework,在當前目錄中發行專案:
dotnet publish --framework netcoreapp3.1 --runtime osx.10.11-x64
發行指定的專案檔:
dotnet publish ~/projects/app1/app1.csproj
發行目前的應用程式,但不還原專案對專案 (P2P) 參考,還原作業期間僅還原根專案:
dotnet publish --no-dependencies
.NET 應用程式發佈概觀
使用 .NET CLI 發佈 .NET 應用程式
執行階段識別碼 (RID) 目錄
使用 dotnet publish 將 .NET 應用程式容器化
使用 macOS Catalina Notarization
已發行應用程式的目錄結構
MSBuild 命令列參考
Visual Studio 發佈設定檔 (.pubxml) 以進行應用程式部署 ASP.NET Core
dotnet msbuild
修剪獨立部署