Sdílet prostřednictvím


Profily publikování sady Visual Studio (.pubxml) pro nasazení aplikace ASP.NET Core

Note

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.

Warning

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.

Podle Sayed Ibrahim Hashimi a Rick Anderson

Tento dokument se zaměřuje na použití sady Visual Studio 2022 nebo novější k vytváření a používání profilů publikování. Profily publikování vytvořené pomocí sady Visual Studio lze použít s nástrojem MSBuild a sadou Visual Studio. Pokyny k publikování do Azure najdete v tématu Publikování aplikace ASP.NET Core do Azure pomocí sady Visual Studio.

Nejaktuálnější a podrobné informace o:

Příkaz dotnet new mvc vytvoří soubor projektu obsahující následující element<>:

<Project Sdk="Microsoft.NET.Sdk.Web">
    <!-- omitted for brevity -->
</Project>

Atribut předchozího <Project> prvku Sdk importuje vlastnosti a cíle MSBuild z $(MSBuildSDKsPath)\Microsoft.NET.Sdk.Web\Sdk\Sdk.props a $(MSBuildSDKsPath)\Microsoft.NET.Sdk.Web\Sdk\Sdk.targets. Výchozí umístění pro $(MSBuildSDKsPath) (se sadou Visual Studio 2022) je složka%programfiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Sdks .

Microsoft.NET.Sdk.Web (Webová sada SDK) závisí na jiných sadách SDK, včetně Microsoft.NET.Sdk sady (.NET SDK) a Microsoft.NET.Sdk.Razor (Razor SDK). Importují se vlastnosti a cíle nástroje MSBuild přidružené ke každé závislé sadě SDK. Cíle publikování importují odpovídající sadu cílů na základě použité metody publikování.

Když MSBuild nebo Visual Studio načte projekt, dojde k následujícím akcím vysoké úrovně:

  • Sestavení projektu
  • Výpočetní soubory k publikování
  • Publikování souborů do cíle

Položky výpočetního projektu

Při načtení projektu se počítají položky projektu MSBuild (soubory). Typ položky určuje způsob zpracování souboru. Ve výchozím nastavení .cs jsou soubory zahrnuté do Compile seznamu položek. Soubory v Compile seznamu položek se kompilují.

Seznam Content položek obsahuje soubory publikované kromě výstupů sestavení. Ve výchozím nastavení jsou soubory odpovídající vzorům wwwroot\****\*.configa **\*.json jsou zahrnuty do Content seznamu položek. Vzor globbingu wwwroot\**například odpovídá všem souborům ve složce wwwroot a jejích podsložkách.

Webová . V důsledku toho jsou soubory odpovídající vzorům **\*.cshtml a **\*.razor také zahrnuty do Content seznamu položek.

Webová . V důsledku toho jsou soubory odpovídající **\*.cshtml vzoru zahrnuty také do Content seznamu položek.

Pokud chcete do seznamu publikování explicitně přidat soubor, přidejte ho .csproj přímo do souboru, jak je znázorněno v části Zahrnout soubory .

Při výběru tlačítka Publikovat v sadě Visual Studio nebo při publikování z příkazového řádku:

  • Vlastnosti a položky se počítají (soubory potřebné k sestavení).
  • Pouze Visual Studio: Obnoví se balíčky NuGet. (Obnovení musí být explicitní uživatelem v rozhraní příkazového řádku.)
  • Projekt se sestaví.
  • Položky publikování se počítají (soubory potřebné k publikování).
  • Projekt se publikuje (vypočítané soubory se zkopírují do cíle publikování).

Když ASP.NET základní odkazy Microsoft.NET.Sdk.Web na projekt v souboru projektu, app_offline.htm soubor se umístí do kořenového adresáře webové aplikace. Pokud existuje tento soubor, modul ASP.NET Core aplikaci řádně vypne a během nasazování zobrazuje soubor app_offline.htm. Další informace najdete v referenčních informacích ke konfiguraci modulu ASP.NET Core.

Základní publikování příkazového řádku

Publikování z příkazového řádku funguje na všech platformách podporovaných .NET a nevyžaduje Visual Studio. V následujících příkladech se příkaz dotnet publish v .NET CLI spustí z adresáře projektu (který obsahuje .csproj soubor). Pokud složka projektu není aktuálním pracovním adresářem, explicitně předejte cestu k souboru projektu. Například:

dotnet publish C:\Webs\Web1

Spuštěním následujících příkazů vytvořte a publikujte webovou aplikaci:

dotnet new mvc
dotnet publish

Příkaz dotnet publish vytvoří variantu následujícího výstupu:

C:\Webs\Web1>dotnet publish
Restore complete (0.4s)
  Web1 succeeded (9.2s) → bin\Release\net9.0\publish\

Výchozí formát složky publikování je bin\Debug\{TARGET FRAMEWORK MONIKER}. Například bin\Release\net9.0\

Následující příkaz určuje Release sestavení a adresář publikování:

dotnet publish -c Release -o C:\MyWebs\test

Příkaz dotnet publish volá nástroj MSBuild, který vyvolá Publish cíl. Všechny předané dotnet publish parametry jsou předány nástroji MSBuild. Parametry -c a -o parametry se mapuje na vlastnosti a Configuration vlastnosti nástroje MSBuildOutputPath.

Vlastnosti nástroje MSBuild lze předat pomocí některého z následujících formátů:

  • -p:<NAME>=<VALUE>
  • /p:<NAME>=<VALUE>

Například následující příkaz publikuje Release sestavení do sdílené síťové složky. Sdílená složka sítě se zadává pomocí lomítek (r8/) a funguje na všech podporovaných platformách .NET.

dotnet publish -c Release /p:PublishDir=//r8/release/AdminWeb

Ověřte, že publikovaná aplikace pro nasazení není spuštěná. Soubory ve složce publikování se při spuštění aplikace zamknou. Nasazení se nedá provést, protože uzamčené soubory nelze kopírovat.

Další informace najdete v souboru readme Microsoft.NET.Sdk.Publish .

Publikovat profily

V této části se k vytvoření profilu publikování používá Visual Studio 2022 nebo novější. Po vytvoření profilu je k dispozici publikování ze sady Visual Studio nebo příkazového řádku. Profily publikování můžou zjednodušit proces publikování a může existovat libovolný počet profilů.

V sadě Visual Studio vytvořte profil publikování tak, že zvolíte jednu z následujících cest:

  • V Průzkumníku řešení klikněte pravým tlačítkem na projekt a vyberte Publikovat.
  • V nabídce Sestavení vyberte Publikovat {PROJECT NAME}.

Zobrazí se karta Publikovat na stránce možností aplikace. K dispozici je několik cílů publikování, mezi které patří:

  • Azure
  • Registr kontejnerů Docker
  • Folder
  • SLUŽBA IIS, FTP, nasazení webu (pro libovolný webový server)
  • Importovat profil

Pokud chcete určit nejvhodnější cíl publikování, podívejte se, jaké možnosti publikování jsou pro mě vhodné.

Pokud je vybrán cíl publikování složky, zadejte cestu ke složce pro uložení publikovaných prostředků. Výchozí cesta ke složce je bin\{PROJECT CONFIGURATION}\{TARGET FRAMEWORK MONIKER}\publish\. Například bin\Release\netcoreapp2.2\publish\. Dokončete výběr tlačítka Vytvořit profil.

Po vytvoření profilu publikování se obsah karty Publikovat změní. Nově vytvořený profil se zobrazí v rozevíracím seznamu. Pod rozevíracím seznamem vyberte Vytvořit nový profil a vytvořte další nový profil.

Nástroj sady Visual Studio pro publikování vytvoří soubor MSBuild Properties/PublishProfiles/{PROFILE NAME}.pubxml popisující profil publikování. Soubor .pubxml :

  • Obsahuje nastavení konfigurace publikování a používá se procesem publikování.
  • Je možné upravit tak, aby se přizpůsobil proces sestavení a publikování.

Při publikování do cíle Azure soubor .pubxml :

  • Obsahuje identifikátor předplatného Azure.
  • Neměl by být zkontrolován do správy zdrojového kódu, protože identifikátor předplatného je citlivá informace.

Citlivé informace, například heslo k publikování, se šifrují na úrovni uživatele nebo počítače. Soubor Properties/PublishProfiles/{PROFILE NAME}.pubxml.user obsahuje informace potřebné nástrojem MSBuild k načtení uživatelského jména a hesla.

Přehled publikování webové aplikace ASP.NET Core najdete v tématu Hostování a nasazení ASP.NET Core. Úlohy a cíle NÁSTROJE MSBuild potřebné k publikování webové aplikace ASP.NET Core jsou opensourcové v úložišti dotnet/websdk.

dotnet publish a dotnet build:

  • Lze použít profily publikování pro složku, MSDeploy a Kudu. Vzhledem k tomu, že msDeploy nemá podporu pro různé platformy, možnosti MSDeploy jsou podporovány pouze ve Windows.
  • Podpora rozhraní Kudu API pro publikování do Azure z libovolné platformy Publikování sady Visual Studio podporuje rozhraní Kudu API, ale podporuje ji WebSDK pro publikování do Azure pro různé platformy.

Nepředávejte DeployOnBuild příkaz dotnet publish .

Další informace naleznete v tématu Microsoft.NET.Sdk.Publish.

Příklad publikování složky

Při publikování s profilem nazvaným FolderProfile použijte některý z následujících příkazů:

dotnet publish /p:Configuration=Release /p:PublishProfile=FolderProfile
dotnet build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
msbuild /p:DeployOnBuild=true /p:PublishProfile=FolderProfile

Volání příkazu dotnet buildumsbuildspuštění procesu sestavení a publikování Příkazy dotnet build a msbuild příkazy jsou při předávání profilu složky ekvivalentní. Při volání msbuild přímo ve Windows se používá verze rozhraní .NET Framework nástroje MSBuild. Volání dotnet build na profil, který není složkou:

  • msbuildVyvolá , který používá MSDeploy.
  • Výsledkem je selhání (i když běží ve Windows). Pokud chcete publikovat s profilem, který není ve složce, zavolejte msbuild přímo.

V sadě Visual Studio byl vytvořen následující profil publikování složky a publikuje se do sdílené síťové složky:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
  <PropertyGroup>
    <DeleteExistingFiles>false</DeleteExistingFiles>
    <ExcludeApp_Data>false</ExcludeApp_Data>
    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <PublishProvider>FileSystem</PublishProvider>
    <PublishUrl>\\r8\Release\AdminWeb</PublishUrl>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <_TargetId>Folder</_TargetId>
  </PropertyGroup>
</Project>

V předchozím příkladu:

  • Vlastnost <ExcludeApp_Data> je k dispozici pro splnění požadavku schématu XML. Vlastnost <ExcludeApp_Data> nemá žádný vliv na proces publikování, i když je v kořenovém adresáři projektu složka App_Data . Složka App_Data neobdrží zvláštní zacházení, protože se používá v projektech ASP.NET 4.x.
  • Vlastnost <LastUsedBuildConfiguration> je nastavena na hodnotu Release. Při publikování ze sady Visual Studio je hodnota <LastUsedBuildConfiguration> nastavena pomocí hodnoty při spuštění procesu publikování. <LastUsedBuildConfiguration> je speciální a neměl by být přepsán v importovaném souboru MSBuild. Tuto vlastnost však lze přepsat z příkazového řádku pomocí některého z následujících přístupů.
    • Pomocí rozhraní příkazového řádku .NET:

      dotnet publish /p:Configuration=Release /p:PublishProfile=FolderProfile
      
      dotnet build -c Release /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
      
    • Pomocí nástroje MSBuild:

      msbuild /p:Configuration=Release /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
      

Publikování do koncového bodu MSDeploy z příkazového řádku

Viz Microsoft.NET.Sdk.Publish.

Nastavení prostředí

<EnvironmentName> Do profilu publikování (.pubxml) nebo souboru projektu zahrňte vlastnost, která nastaví prostředí aplikace:

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

Pokud potřebujete transformace web.config (například nastavení proměnných prostředí na základě konfigurace, profilu nebo prostředí), přečtěte si téma Transformace web.config.

Vyloučit soubory

Při publikování webových aplikací ASP.NET Core jsou zahrnuty následující prostředky:

  • Artefakty sestavení
  • Složky a soubory odpovídající následujícím vzorům globbingu:
    • **\*.config (například web.config)
    • **\*.json (například appsettings.json)
    • wwwroot\**

NÁSTROJ MSBuild podporuje vzory globbingu. Následující <Content> prvek například potlačí kopírování textových souborů (.txt) ve složce wwwroot\content a jejích podsložkách:

<ItemGroup>
  <Content Update="wwwroot/content/**/*.txt" CopyToPublishDirectory="Never" />
</ItemGroup>

Předchozí kód lze přidat do profilu publikování nebo souboru .csproj . Po přidání do .csproj souboru se pravidlo přidá do všech profilů publikování v projektu.

Následující <MsDeploySkipRules> prvek vylučuje všechny soubory ze složky wwwroot\content :

<ItemGroup>
  <MsDeploySkipRules Include="CustomSkipFolder">
    <ObjectName>dirPath</ObjectName>
    <AbsolutePath>wwwroot\\content</AbsolutePath>
  </MsDeploySkipRules>
</ItemGroup>

<MsDeploySkipRules> neodstraní cíle přeskočení z lokality nasazení. <Content> cílové soubory a složky se odstraní z lokality nasazení. Předpokládejme například, že nasazená webová aplikace měla následující soubory:

  • Views/Home/About1.cshtml
  • Views/Home/About2.cshtml
  • Views/Home/About3.cshtml

Pokud se přidají následující <MsDeploySkipRules> prvky, tyto soubory by se na webu nasazení neodstranily.

<ItemGroup>
  <MsDeploySkipRules Include="CustomSkipFile">
    <ObjectName>filePath</ObjectName>
    <AbsolutePath>Views\\Home\\About1.cshtml</AbsolutePath>
  </MsDeploySkipRules>

  <MsDeploySkipRules Include="CustomSkipFile">
    <ObjectName>filePath</ObjectName>
    <AbsolutePath>Views\\Home\\About2.cshtml</AbsolutePath>
  </MsDeploySkipRules>

  <MsDeploySkipRules Include="CustomSkipFile">
    <ObjectName>filePath</ObjectName>
    <AbsolutePath>Views\\Home\\About3.cshtml</AbsolutePath>
  </MsDeploySkipRules>
</ItemGroup>

Předchozí <MsDeploySkipRules> prvky brání nasazení přeskočených souborů. Po nasazení se tyto soubory neodstraní.

Následující <Content> prvek odstraní cílové soubory v lokalitě nasazení:

<ItemGroup>
  <Content Update="Views/Home/About?.cshtml" CopyToPublishDirectory="Never" />
</ItemGroup>

Použití nasazení příkazového řádku s předchozím <Content> prvkem přináší variaci následujícího výstupu:

MSDeployPublish:
  Starting Web deployment task from source: manifest(C:\Webs\Web1\obj\Release\{TARGET FRAMEWORK MONIKER}\PubTmp\Web1.SourceManifest.
  xml) to Destination: auto().
  Deleting file (Web11112\Views\Home\About1.cshtml).
  Deleting file (Web11112\Views\Home\About2.cshtml).
  Deleting file (Web11112\Views\Home\About3.cshtml).
  Updating file (Web11112\web.config).
  Updating file (Web11112\Web1.deps.json).
  Updating file (Web11112\Web1.dll).
  Updating file (Web11112\Web1.pdb).
  Updating file (Web11112\Web1.runtimeconfig.json).
  Successfully executed Web deployment task.
  Publish Succeeded.
Done Building Project "C:\Webs\Web1\Web1.csproj" (default targets).

Zahrnout soubory

Následující části popisují různé přístupy k zahrnutí souborů v době publikování. Oddíl Obecné zahrnutí souboru používá DotNetPublishFiles položku, kterou poskytuje soubor cíle publikování ve webové sadě SDK. Oddíl Selektivní začlenění souboru používá ResolvedFileToPublish položku, která je poskytována publikačním cílovým souborem v sadě .NET SDK. Vzhledem k tomu, že webová sada SDK závisí na sadě .NET SDK, je možné některou položku použít v projektu ASP.NET Core.

Obecné zahrnutí souborů

Následující příklad element <ItemGroup> ukazuje kopírování složky umístěné mimo adresář projektu do složky publikovaného webu. Všechny soubory přidané do následujících značek <ItemGroup> jsou ve výchozím nastavení zahrnuty.

<ItemGroup>
  <_CustomFiles Include="$(MSBuildProjectDirectory)/../images/**/*" />
  <DotNetPublishFiles Include="@(_CustomFiles)">
    <DestinationRelativePath>wwwroot/images/%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
  </DotNetPublishFiles>
</ItemGroup>

Předchozí kód:

  • Lze přidat do .csproj souboru nebo do profilu publikování. Pokud se přidá do .csproj souboru, zahrne se do každého profilu publikování v projektu.
  • Deklaruje _CustomFiles položku pro ukládání souborů odpovídajících vzoru globbingu Include atributu. Složka obrázků odkazovaná v vzoru se nachází mimo adresář projektu. Rezervovaná vlastnost s názvem $(MSBuildProjectDirectory), která se překládá na absolutní cestu k souboru projektu.
  • Poskytuje seznam souborů pro danou DotNetPublishFiles položku. Ve výchozím nastavení je prvek položky <DestinationRelativePath> prázdný. Výchozí hodnota se přepíše v kódu a používá dobře známá metadata položek, jako %(RecursiveDir)je . Vnitřní text představuje složku wwwroot/images publikovaného webu.

Selektivní zahrnutí souborů

Zvýrazněný kód v následujícím příkladu ukazuje:

  • Kopírování souboru umístěného mimo projekt do složky wwwroot publikovaného webu. Název souboru ReadMe2.md je zachován.
  • Vyjma složky wwwroot\Content .
  • Vyloučení zobrazení\Home\About2.cshtml.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <PublishFramework />
    <ProjectGuid>
      <GUID Here=""></GUID>
    </ProjectGuid>
    <publishUrl>bin\Release\PublishOutput</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
  </PropertyGroup>
  <ItemGroup>
    <ResolvedFileToPublish Include="..\ReadMe2.md">
      <RelativePath>wwwroot\ReadMe2.md</RelativePath>
    </ResolvedFileToPublish>

    <Content Update="wwwroot\Content\**\*" CopyToPublishDirectory="Never" />
    <Content Update="Views\Home\About2.cshtml" CopyToPublishDirectory="Never" />
  </ItemGroup>
</Project>

Předchozí příklad používá ResolvedFileToPublish položku, jejíž výchozí chování je vždy kopírovat soubory zadané v Include atributu na publikovaný web. Přepsat výchozí chování zahrnutím podřízeného <CopyToPublishDirectory> prvku s vnitřním textem nebo NeverPreserveNewest. Například:

<ResolvedFileToPublish Include="..\ReadMe2.md">
  <RelativePath>wwwroot\ReadMe2.md</RelativePath>
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</ResolvedFileToPublish>

Další ukázky nasazení najdete v souboru README webové sady SDK.

Spuštění cíle před publikováním nebo po publikování

Předdefinované BeforePublish a AfterPublish cílové cíle provádějí cíl před nebo po cíli publikování. Do profilu publikování přidejte následující prvky pro protokolování zpráv konzoly před publikováním i po publikování:

<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project>
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <ResourceId>/subscriptions/SomeGuid/resourcegroups/TP_RG/providers/Microsoft.Web/sites/TP22</ResourceId>
    <ResourceGroup>TP_RG</ResourceGroup>
    <PublishProvider>AzureWebSite</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish>https://tp22.azurewebsites.net</SiteUrlToLaunchAfterPublish>
    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
    <ExcludeApp_Data>false</ExcludeApp_Data>
    <ProjectGuid>GuidHere</ProjectGuid>
    <MSDeployServiceURL>something.scm.azurewebsites.net:443</MSDeployServiceURL>
    <DeployIisAppPath>myDeploysIISpath</DeployIisAppPath>
    <RemoteSitePhysicalPath />
    <SkipExtraFilesOnServer>true</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
    <EnableMSDeployBackup>true</EnableMSDeployBackup>
    <EnableMsDeployAppOffline>true</EnableMsDeployAppOffline>
    <UserName />
    <_SavePWD>false</_SavePWD>
    <_DestinationType>AzureWebSite</_DestinationType>
    <InstallAspNetCoreSiteExtension>false</InstallAspNetCoreSiteExtension>
  </PropertyGroup>
    <Target Name="CustomActionsBeforePublish" BeforeTargets="BeforePublish">
        <Message Text="Inside BeforePublish" Importance="high" />
    </Target>
    <Target Name="CustomActionsAfterPublish" AfterTargets="AfterPublish">
        <Message Text="Inside AfterPublish" Importance="high" />
    </Target>
</Project>

Publikování na server pomocí nedůvěryhodného certifikátu

<AllowUntrustedCertificate> Přidejte vlastnost s hodnotou True do profilu publikování:

<PropertyGroup>
  <AllowUntrustedCertificate>True</AllowUntrustedCertificate>
</PropertyGroup>

Služba Kudu

Pokud chcete zobrazit soubory v nasazení webové aplikace služby Aplikace Azure, použijte službu Kudu. scm Připojte token k názvu webové aplikace. Například:

URL Result
http://mysite.azurewebsites.net/ Webová aplikace
http://mysite.scm.azurewebsites.net/ Služba Kudu

Vyberte položku nabídky Konzola ladění a zobrazte, upravte, odstraňte nebo přidejte soubory.

Dodatečné zdroje