dotnet publish
Dit artikel is van toepassing op: ✔️ .NET Core 3.1 SDK en latere versies
Naam
dotnet publish
- Publiceert de toepassing en de bijbehorende afhankelijkheden naar een map voor implementatie naar een hostingsysteem.
Samenvatting
dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
[--artifacts-path <ARTIFACTS_DIR>]
[-c|--configuration <CONFIGURATION>] [--disable-build-servers]
[-f|--framework <FRAMEWORK>] [--force] [--interactive]
[--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
[--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
[--os <OS>] [-r|--runtime <RUNTIME_IDENTIFIER>]
[--sc|--self-contained [true|false]] [--no-self-contained]
[-s|--source <SOURCE>] [--tl:[auto|on|off]]
[--use-current-runtime, --ucr [true|false]]
[-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]
dotnet publish -h|--help
Beschrijving
dotnet publish
compileert de toepassing, leest de bijbehorende afhankelijkheden die zijn opgegeven in het projectbestand en publiceert de resulterende set bestanden naar een map. De uitvoer bevat de volgende assets:
- Tussentaalcode (IL) in een assembly met een DLL-extensie .
- Een .deps.json-bestand met alle afhankelijkheden van het project.
- Een .runtimeconfig.json-bestand dat de gedeelde runtime aangeeft die de toepassing verwacht, evenals andere configuratieopties voor de runtime (bijvoorbeeld type garbagecollection).
- De afhankelijkheden van de toepassing, die uit de NuGet-cache worden gekopieerd naar de uitvoermap.
De uitvoer van de dotnet publish
opdracht is gereed voor implementatie naar een hostingsysteem (bijvoorbeeld een server, pc, Mac, laptop) voor uitvoering. Dit is de enige officieel ondersteunde manier om de toepassing voor te bereiden op implementatie. Afhankelijk van het type implementatie dat door het project wordt opgegeven, is de .NET-gedeelde runtime mogelijk al dan niet geïnstalleerd op het hostingsysteem. Zie .NET-apps publiceren met de .NET CLI voor meer informatie.
Impliciete herstelbewerking
U hoeft niet uit te voeren dotnet restore
omdat deze impliciet wordt uitgevoerd door alle opdrachten waarvoor een herstelbewerking moet worden uitgevoerd, zoals dotnet new
, dotnet build
, , dotnet run
, dotnet test
, , en dotnet publish
.dotnet pack
Als u impliciete herstel wilt uitschakelen, gebruikt u de --no-restore
optie.
De dotnet restore
opdracht is nog steeds nuttig in bepaalde scenario's waarbij het expliciet herstellen zinvol is, zoals builds voor continue integratie in Azure DevOps Services of in buildsystemen die expliciet moeten worden beheerd wanneer de herstelbewerking plaatsvindt.
Zie de dotnet restore
documentatie voor informatie over het beheren van NuGet-feeds.
MSBuild
Met de dotnet publish
opdracht wordt MSBuild aangeroepen, die het Publish
doel aanroept. Als de IsPublishable
eigenschap is ingesteld false
op voor een bepaald project, kan het Publish
doel niet worden aangeroepen en wordt met de dotnet publish
opdracht alleen de impliciete dotnet-herstelbewerking op het project uitgevoerd.
Alle parameters die aan worden doorgegeven dotnet publish
, worden doorgegeven aan MSBuild. De -c
parameters worden -o
respectievelijk toegewezen aan MSBuild Configuration
en PublishDir
eigenschappen.
De dotnet publish
opdracht accepteert MSBuild-opties, zoals -p
voor het instellen van eigenschappen en -l
het definiëren van een logboekregistratie. U kunt bijvoorbeeld een MSBuild-eigenschap instellen met behulp van de indeling: -p:<NAME>=<VALUE>
.
.pubxml-bestanden
U kunt ook publicatie-gerelateerde eigenschappen instellen door te verwijzen naar een .pubxml-bestand . Voorbeeld:
dotnet publish -p:PublishProfile=FolderProfile
In het voorgaande voorbeeld wordt het bestand FolderProfile.pubxml gebruikt dat is gevonden in de <map project_folder>/Properties/PublishProfiles. Als u een pad en bestandsextensie opgeeft bij het instellen van de PublishProfile
eigenschap, worden deze genegeerd. MSBuild kijkt standaard in de map Properties/PublishProfiles en gaat ervan uit dat de pubxml-bestandsextensie wordt gebruikt. Als u het pad en de bestandsnaam inclusief extensie wilt opgeven, stelt u de PublishProfileFullPath
eigenschap in in plaats van de PublishProfile
eigenschap.
In het .pubxml-bestand :
PublishUrl
wordt door Visual Studio gebruikt om het publicatiedoel aan te geven.PublishDir
wordt door de CLI gebruikt om het publicatiedoel aan te geven.
Als u wilt dat het scenario op alle plaatsen werkt, kunt u beide eigenschappen initialiseren op dezelfde waarde in het .pubxml-bestand . Als het probleem met GitHub dotnet/sdk#20931 is opgelost, hoeft slechts één van deze eigenschappen te worden ingesteld.
Sommige eigenschappen in het .pubxml-bestand worden alleen door Visual Studio gehonoreerd en hebben geen effect op dotnet publish
. We werken eraan om de CLI meer in overeenstemming te brengen met het gedrag van Visual Studio. Maar sommige eigenschappen worden nooit gebruikt door de CLI. De CLI en Visual Studio doen beide het verpakkingsaspect van publicatie en dotnet/sdk#29817 plannen om ondersteuning toe te voegen voor meer eigenschappen die hieraan gerelateerd zijn. De CLI doet echter niet het automatiseringsaspect van de implementatie van publiceren en eigenschappen die zijn gerelateerd aan die niet worden ondersteund. De meest opvallende .pubxml-eigenschappen die niet worden ondersteund door dotnet publish
, zijn de volgende eigenschappen die van invloed zijn op de build:
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
MSBuild-eigenschappen
De volgende MSBuild-eigenschappen wijzigen de uitvoer van dotnet publish
.
PublishReadyToRun
Compileert toepassingsassembly's als ReadyToRun-indeling (R2R). R2R is een vorm van AOT-compilatie (ahead-of-time). Zie ReadyToRun-installatiekopieën voor meer informatie.
Als u waarschuwingen wilt zien over ontbrekende afhankelijkheden die runtimefouten kunnen veroorzaken, gebruikt u
PublishReadyToRunShowWarnings=true
.U wordt aangeraden in een publicatieprofiel op te geven
PublishReadyToRun
in plaats van op de opdrachtregel.PublishSingleFile
Verpakt de app in een platformspecifiek uitvoerbaar bestand met één bestand. Zie het ontwerpdocument met één bestandsbundel voor meer informatie over het publiceren van één bestand.
U wordt aangeraden deze optie op te geven in het projectbestand in plaats van op de opdrachtregel.
PublishTrimmed
Trimt ongebruikte bibliotheken om de implementatiegrootte van een app te verminderen bij het publiceren van een zelfstandig uitvoerbaar bestand. Zie Self-Ingesloten implementaties en uitvoerbare bestanden knippen voor meer informatie. Beschikbaar sinds .NET 6 SDK.
U wordt aangeraden deze optie op te geven in het projectbestand in plaats van op de opdrachtregel.
Voor meer informatie raadpleegt u de volgende bronnen:
- MSBuild-opdrachtregelverwijzing
- Visual Studio-publicatieprofielen (.pubxml) voor ASP.NET Core-app-implementatie
- dotnet msbuild
Downloads van workloadmanifesten
Wanneer u deze opdracht uitvoert, wordt er een asynchrone achtergronddownload van reclamemanifesten voor workloads gestart. Als het downloaden nog steeds wordt uitgevoerd wanneer deze opdracht is voltooid, wordt het downloaden gestopt. Zie Reclamemanifesten voor meer informatie.
Argumenten
PROJECT|SOLUTION
Het project of de oplossing die moet worden gepubliceerd.
PROJECT
is het pad en de bestandsnaam van een C#-, F#- of Visual Basic-projectbestand, of het pad naar een map die een C#-, F#- of Visual Basic-projectbestand bevat. Als de map niet is opgegeven, wordt deze standaard ingesteld op de huidige map.SOLUTION
is het pad en de bestandsnaam van een oplossingsbestand (.sln extensie) of het pad naar een map die een oplossingsbestand bevat. Als de map niet is opgegeven, wordt deze standaard ingesteld op de huidige map.
Opties
-a|--arch <ARCHITECTURE>
Hiermee geeft u de doelarchitectuur. Dit is een verkorte syntaxis voor het instellen van de Runtime-id (RID), waarbij de opgegeven waarde wordt gecombineerd met de standaard-RID. Als u bijvoorbeeld op een
win-x64
computer opgeeft--arch x86
, wordt de RID ingesteld opwin-x86
. Als u deze optie gebruikt, gebruikt u de-r|--runtime
optie niet. Beschikbaar sinds .NET 6 Preview 7.
--artifacts-path <ARTIFACTS_DIR>
Alle builduitvoerbestanden van de uitgevoerde opdracht worden weergegeven in submappen onder het opgegeven pad, gescheiden door project. Zie De indeling Artefacten-uitvoer voor meer informatie. Beschikbaar sinds .NET 8 SDK.
-c|--configuration <CONFIGURATION>
Definieert de buildconfiguratie. Als u ontwikkelt met de .NET 8 SDK of een latere versie, gebruikt de opdracht standaard de
Release
configuratie voor projecten waarvan TargetFramework is ingesteldnet8.0
op of een latere versie. De standaard buildconfiguratie isDebug
voor eerdere versies van de SDK en voor eerdere doelframeworks. U kunt de standaardinstelling in projectinstellingen overschrijven of door deze optie te gebruiken. Zie 'dotnet publish' maakt gebruik van releaseconfiguratie en dotnet pack maakt gebruik van releaseconfiguratie.
--disable-build-servers
Hiermee wordt de opdracht gedwongen om permanente buildservers te negeren. Deze optie biedt een consistente manier om al het gebruik van buildcaching uit te schakelen, waardoor een volledig nieuwe build wordt afgemaakt. Een build die niet afhankelijk is van caches is handig wanneer de caches om een of andere reden beschadigd of onjuist zijn. Beschikbaar sinds .NET 7 SDK.
-f|--framework <FRAMEWORK>
Hiermee publiceert u de toepassing voor het opgegeven doelframework. U moet het doelframework opgeven in het projectbestand.
--force
Hiermee worden alle afhankelijkheden gedwongen om te worden opgelost, zelfs als de laatste herstelbewerking is geslaagd. Het opgeven van deze vlag is hetzelfde als het verwijderen van het project.assets.json bestand.
-?|-h|--help
Hiermee wordt een beschrijving afgedrukt van het gebruik van de opdracht.
--interactive
Hiermee kan de opdracht stoppen en wachten op invoer of actie van de gebruiker. Bijvoorbeeld om de verificatie te voltooien. Beschikbaar sinds .NET Core 3.0 SDK.
--manifest <PATH_TO_MANIFEST_FILE>
Hiermee geeft u een of meerdere doelmanifesten op die moeten worden gebruikt om de set pakketten te knippen die met de app zijn gepubliceerd. Het manifestbestand maakt deel uit van de uitvoer van de
dotnet store
opdracht. Als u meerdere manifesten wilt opgeven, voegt u een--manifest
optie toe voor elk manifest.--no-build
Het project wordt niet gebouwd voordat het wordt gepubliceerd. De vlag wordt ook impliciet ingesteld
--no-restore
.--no-dependencies
Negeert project-naar-projectverwijzingen en herstelt alleen het hoofdproject.
--nologo
De opstartbanner of het copyrightbericht wordt niet weergegeven.
--no-restore
Voert geen impliciete herstelbewerking uit bij het uitvoeren van de opdracht.
-o|--output <OUTPUT_DIRECTORY>
Hiermee geeft u het pad voor de uitvoermap.
Als dit niet is opgegeven, wordt deze standaard ingesteld op [project_file_folder]/bin/[configuration]/[framework]/publish/ voor een frameworkafhankelijk uitvoerbaar bestand en binaire bestanden op meerdere platforms. Deze wordt standaard ingesteld op [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ voor een zelfstandig uitvoerbaar bestand.
Als de uitvoermap zich in een webproject in de projectmap bevindt, resulteren opeenvolgende
dotnet publish
opdrachten in geneste uitvoermappen. Als de projectmap bijvoorbeeld myproject is en de uitvoermap publiceren myproject/publish is en u twee keer uitvoertdotnet publish
, worden inhoudsbestanden zoals .config en .json bestanden in myproject/publish/publish/publish geplaatst. Als u wilt voorkomen dat publicatiemappen worden genest, geeft u een publicatiemap op die zich niet rechtstreeks onder de projectmap bevindt of sluit u de publicatiemap uit van het project. Als u een publicatiemap met de naam publishoutput wilt uitsluiten, voegt u het volgende element toe aan eenPropertyGroup
element in het .csproj-bestand :<DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
.NET 7.0.200 SDK en hoger
Als u de optie opgeeft bij het
--output
uitvoeren van deze opdracht op een oplossing, verzendt de CLI een waarschuwing (een fout in 7.0.200) vanwege de onduidelijke semantiek van het uitvoerpad. De--output
optie is niet toegestaan omdat alle uitvoer van alle gemaakte projecten wordt gekopieerd naar de opgegeven map, die niet compatibel is met projecten met meerdere doelgroepen, evenals projecten met verschillende versies van directe en transitieve afhankelijkheden. Zie De optie Op oplossingsniveau--output
is niet meer geldig voor build-gerelateerde opdrachten voor meer informatie..NET Core 3.x SDK en hoger
Als u een relatief pad opgeeft bij het publiceren van een project, is de gegenereerde uitvoermap relatief ten opzichte van de huidige werkmap, niet naar de locatie van het projectbestand.
Als u een relatief pad opgeeft bij het publiceren van een oplossing, gaat alle uitvoer voor alle projecten naar de opgegeven map ten opzichte van de huidige werkmap. Als u publicatie-uitvoer wilt maken, gaat u naar afzonderlijke mappen voor elk project, geeft u een relatief pad op met behulp van de eigenschap msbuild
PublishDir
in plaats van de--output
optie. Verzendt bijvoorbeelddotnet publish -p:PublishDir=.\publish
publicatie-uitvoer voor elk project naar eenpublish
map onder de map die het projectbestand bevat..NET Core 2.x SDK
Als u een relatief pad opgeeft bij het publiceren van een project, is de gegenereerde uitvoermap relatief ten opzichte van de locatie van het projectbestand, niet naar de huidige werkmap.
Als u een relatief pad opgeeft bij het publiceren van een oplossing, gaat de uitvoer van elk project naar een afzonderlijke map ten opzichte van de locatie van het projectbestand. Als u een absoluut pad opgeeft bij het publiceren van een oplossing, gaat alle publicatie-uitvoer voor alle projecten naar de opgegeven map.
--os <OS>
Hiermee geeft u het doelbesturingssysteem (OS). Dit is een verkorte syntaxis voor het instellen van de Runtime-id (RID), waarbij de opgegeven waarde wordt gecombineerd met de standaard-RID. Als u bijvoorbeeld op een
win-x64
computer opgeeft--os linux
, wordt de RID ingesteld oplinux-x64
. Als u deze optie gebruikt, gebruikt u de-r|--runtime
optie niet. Beschikbaar sinds .NET 6.
--sc|--self-contained [true|false]
Hiermee publiceert u de .NET-runtime met uw toepassing, zodat de runtime niet hoeft te worden geïnstalleerd op de doelcomputer. De standaardinstelling is
true
als er een runtime-id is opgegeven en het project een uitvoerbaar project is (niet een bibliotheekproject). Zie .NET-toepassing publiceren en .NET-apps publiceren met de .NET CLI voor meer informatie.Als deze optie wordt gebruikt zonder op te
true
geven offalse
, is de standaardwaardetrue
. In dat geval plaatst u de oplossing of het projectargument niet direct na--self-contained
, omdattrue
offalse
wordt verwacht in die positie.--no-self-contained
Gelijk aan
--self-contained false
.--source <SOURCE>
De URI van de NuGet-pakketbron die moet worden gebruikt tijdens de herstelbewerking.
-r|--runtime <RUNTIME_IDENTIFIER>
Hiermee publiceert u de toepassing voor een bepaalde runtime. Zie de RID-catalogus voor een lijst met runtime-id's (RID's). Zie .NET-toepassing publiceren en .NET-apps publiceren met de .NET CLI voor meer informatie. Als u deze optie gebruikt, gebruikt
--self-contained
u of--no-self-contained
ook.
--tl:[auto|on|off]
Hiermee geeft u op of de terminallogger moet worden gebruikt voor de build-uitvoer. De standaardwaarde is
auto
, waarmee eerst de omgeving wordt geverifieerd voordat u terminallogboekregistratie inschakelt. De omgevingscontrole controleert of de terminal in staat is moderne uitvoerfuncties te gebruiken en geen omgeleide standaarduitvoer gebruikt voordat de nieuwe logger wordt ingeschakeld.on
slaat de omgevingscontrole over en schakelt terminallogboekregistratie in.off
slaat de omgevingscontrole over en maakt gebruik van de standaardconsolelogger.De terminallogger toont u de herstelfase, gevolgd door de buildfase. Tijdens elke fase worden de huidige bouwprojecten onderaan de terminal weergegeven. Elk project dat wordt gebouwd, levert zowel het MSBuild-doel dat momenteel wordt gebouwd als de hoeveelheid tijd die aan dat doel is besteed. U kunt deze informatie doorzoeken voor meer informatie over de build. Wanneer een project klaar is met bouwen, wordt één sectie 'build completed' geschreven die het volgende vastlegt:
- De naam van het gebouwde project.
- Het doelframework (indien multi-targeted).
- De status van die build.
- De primaire uitvoer van die build (die is hyperlinked).
- Diagnostische gegevens die voor dat project worden gegenereerd.
Deze optie is beschikbaar vanaf .NET 8.
--use-current-runtime, --ucr [true|false]
Hiermee stelt u het
RuntimeIdentifier
in op een platform dat draagbaarRuntimeIdentifier
is op basis van een van uw computer. Dit gebeurt impliciet met eigenschappen waarvoor eenRuntimeIdentifier
, zoalsSelfContained
,PublishAot
,PublishSelfContained
, , enPublishSingleFile
PublishReadyToRun
. Als de eigenschap is ingesteld op onwaar, vindt die impliciete resolutie niet meer plaats.
-v|--verbosity <LEVEL>
Hiermee stelt u het uitgebreidheidsniveau van de opdracht in. Toegestane waarden zijn
q[uiet]
, , ,n[ormal]
endiag[nostic]
d[etailed]
m[inimal]
. De standaardwaarde isminimal
. Zie LoggerVerbosity voor meer informatie.
--version-suffix <VERSION_SUFFIX>
Definieert het versieachtervoegsel om het sterretje (
*
) in het versieveld van het projectbestand te vervangen.
Voorbeelden
Maak een frameworkafhankelijk binair binair platform voor het project in de huidige map:
dotnet publish
Vanaf .NET Core 3.0 SDK maakt dit voorbeeld ook een frameworkafhankelijk uitvoerbaar bestand voor het huidige platform.
Maak een zelfstandig uitvoerbaar bestand voor het project in de huidige map voor een specifieke runtime:
dotnet publish --runtime osx-x64
De RID moet zich in het projectbestand hebben.
Maak een frameworkafhankelijk uitvoerbaar bestand voor het project in de huidige map voor een specifiek platform:
dotnet publish --runtime osx-x64 --self-contained false
De RID moet zich in het projectbestand hebben. Dit voorbeeld is van toepassing op .NET Core 3.0 SDK en latere versies.
Publiceer het project in de huidige map voor een specifieke runtime en het doelframework:
dotnet publish --framework net8.0 --runtime osx-x64
Publiceer het opgegeven projectbestand:
dotnet publish ~/projects/app1/app1.csproj
Publiceer de huidige toepassing, maar herstel geen P2P-verwijzingen (project-to-project), alleen het hoofdproject tijdens de herstelbewerking:
dotnet publish --no-dependencies
Zie ook
- Overzicht van .NET-toepassingspublicatie
- .NET-apps publiceren met de .NET CLI
- Doelframeworks
- Rid-catalogus (Runtime Identifier)
- Een .NET-app containeriseren met dotnet publish
- Werken met macOS Catalina Notarization
- Mapstructuur van een gepubliceerde toepassing
- MSBuild-opdrachtregelverwijzing
- Visual Studio-publicatieprofielen (.pubxml) voor ASP.NET Core-app-implementatie
- dotnet msbuild
- Zelfstandige implementaties knippen