Freigeben über


ASP.NET Webbereitstellung mit Visual Studio: Bereitstellen zusätzlicher Dateien

von Tom Dykstra

Herunterladen des Starterprojekts

In dieser Tutorialreihe erfahren Sie, wie Sie mithilfe von Visual Studio 2012 oder Visual Studio 2010 eine ASP.NET Webanwendung für Azure App Service Web-Apps oder einen Hostinganbieter eines Drittanbieters bereitstellen (veröffentlichen). Informationen zur Reihe finden Sie im ersten Tutorial der Reihe.

Überblick

In diesem Tutorial erfahren Sie, wie Sie die Visual Studio-Webveröffentlichungspipeline erweitern, um während der Bereitstellung eine zusätzliche Aufgabe durchzuführen. Die Aufgabe besteht darin, zusätzliche Dateien, die sich nicht im Projektordner befinden, auf die Zielwebsite zu kopieren.

In diesem Tutorial kopieren Sie eine zusätzliche Datei: robots.txt. Sie möchten diese Datei im Staging bereitstellen, aber nicht in der Produktion. Im Tutorial Bereitstellen in der Produktion haben Sie diese Datei dem Projekt hinzugefügt und das Produktionsveröffentlichungsprofil so konfiguriert, dass es ausgeschlossen wird. In diesem Tutorial sehen Sie eine alternative Methode zur Behandlung dieser Situation, die für alle Dateien nützlich ist, die Sie bereitstellen möchten, aber nicht in das Projekt einschließen möchten.

Verschieben der robots.txt-Datei

Um sich auf eine andere Methode zur Behandlung robots.txtvorzubereiten, verschieben Sie in diesem Abschnitt des Tutorials die Datei in einen Ordner, der nicht im Projekt enthalten ist, und löschen robots.txt aus der Stagingumgebung. Es ist erforderlich, die Datei aus dem Staging zu löschen, damit Sie überprüfen können, ob Ihre neue Methode zum Bereitstellen der Datei in dieser Umgebung ordnungsgemäß funktioniert.

  1. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die dateirobots.txt, und klicken Sie auf Aus Projekt ausschließen.

  2. Erstellen Sie mithilfe von Windows Explorer einen neuen Ordner im Projektmappenordner, und nennen Sie ihn ExtraFiles.

  3. Verschieben Sie die robots.txt Datei aus dem Projektordner ContosoUniversity in den Ordner ExtraFiles .

    Ordner

  4. Löschen Sie mit Ihrem FTP-Tool die robots.txt-Datei von der Stagingwebsite.

    Alternativ können Sie auf der Registerkarte Einstellungen des Stagingveröffentlichungsprofils unter Dateiveröffentlichungsoptionen die Option Zusätzliche Dateien am Ziel entfernen auswählen und dann im Staging erneut veröffentlichen.

Aktualisieren der Veröffentlichungsprofildatei

Sie benötigen nur robots.txt im Staging. Daher ist staging das einzige Veröffentlichungsprofil, das Sie aktualisieren müssen, um es bereitzustellen.

  1. Öffnen Sie in Visual Studio Staging.pubxml.

  2. Fügen Sie am Ende der Datei vor dem schließenden </Project> Tag das folgende Markup hinzu:

    <Target Name="CustomCollectFiles">
        <ItemGroup>
          <_CustomFiles Include="..\ExtraFiles\**\*" />
          <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
          </FilesForPackagingFromProject>
        </ItemGroup>
      </Target>
    

    Dieser Code erstellt ein neues Ziel , das zusätzliche Dateien sammelt, die bereitgestellt werden sollen. Ein Ziel besteht aus mindestens einer Aufgabe, die MSBuild basierend auf den von Ihnen angegebenen Bedingungen ausführt.

    Das Include Attribut gibt an, dass der Ordner, in dem die Dateien gefunden werden sollen , ExtraFiles ist und sich auf derselben Ebene wie der Projektordner befindet. MSBuild sammelt alle Dateien aus diesem Ordner und rekursiv aus allen Unterordnern (das doppelte Sternchen gibt rekursive Unterordner an). Mit diesem Code können Sie mehrere Dateien und Dateien in Unterordnern im Ordner ExtraFiles ablegen, und alle werden bereitgestellt.

    Das DestinationRelativePath -Element gibt an, dass die Ordner und Dateien in den Stammordner der Zielwebsite in derselben Datei- und Ordnerstruktur wie im Ordner ExtraFiles kopiert werden sollen. Wenn Sie den Ordner ExtraFiles selbst kopieren möchten, lautet der DestinationRelativePath Wert ExtraFiles\%(RecursiveDir)%(Filename)%(Extension).

  3. Fügen Sie am Ende der Datei vor dem schließenden </Project> Tag das folgende Markup hinzu, das angibt, wann das neue Ziel ausgeführt werden soll.

    <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
    
        <CopyAllFilesToSingleFolderForMsdeployDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
        </CopyAllFilesToSingleFolderForMsdeployDependsOn>
    </PropertyGroup>
    

    Dieser Code bewirkt, dass das neue CustomCollectFiles Ziel ausgeführt wird, wenn das Ziel, das Dateien in den Zielordner kopiert, ausgeführt wird. Es gibt ein separates Ziel für die Erstellung von Veröffentlichungs- und Bereitstellungspaketen, und das neue Ziel wird in beide Ziele eingefügt, falls Sie sich entscheiden, die Bereitstellung mithilfe eines Bereitstellungspakets anstelle der Veröffentlichung durchzuführen.

    Die PUBXML-Datei sieht nun wie im folgenden Beispiel aus:

    <?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 ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <WebPublishMethod>MSDeploy</WebPublishMethod>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish>http://contosou-staging.azurewebsites.net</SiteUrlToLaunchAfterPublish>
        <ExcludeApp_Data>True</ExcludeApp_Data>
        <MSDeployServiceURL>waws-prod-bay-001.publish.azurewebsites.windows.net:443</MSDeployServiceURL>
        <DeployIisAppPath>contosou-staging</DeployIisAppPath>
        <RemoteSitePhysicalPath />
        <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>
        <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
        <UserName>$contosou-staging</UserName>
        <_SavePWD>True</_SavePWD>
        <PublishDatabaseSettings>
          <Objects xmlns="">
            <ObjectGroup Name="SchoolContext" Order="1" Enabled="True">
              <Destination Path="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User ID=CU-staging-admin@sk0264hvc9;Password=" Name="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=" />
              <Object Type="DbCodeFirst">
                <Source Path="DBMigration" DbContext="ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL" MigrationConfiguration="ContosoUniversity.DAL.Migrations.Configuration, ContosoUniversity.DAL" Origin="Configuration" />
              </Object>
            </ObjectGroup>
            <ObjectGroup Name="DefaultConnection" Order="2" Enabled="False">
              <Destination Path="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User ID=CU-staging-admin@sk0264hvc9;Password=" Name="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=" />
              <Object Type="DbDacFx">
                <PreSource Path="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-ContosoUniversity.mdf;Initial Catalog=aspnet-ContosoUniversity;Integrated Security=True" includeData="False" />
                <Source Path="$(IntermediateOutputPath)AutoScripts\DefaultConnection_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" />
              </Object>
              <UpdateFrom Type="Web.Config">
                <Source MatchValue="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;Initial Catalog=aspnet-ContosoUniversity;AttachDBFilename=|DataDirectory|\aspnet-ContosoUniversity.mdf" MatchAttributes="$(UpdateFromConnectionStringAttributes)" />
              </UpdateFrom>
              <Object Type="DbFullSql" Enabled="False">
                <Source Path="..\aspnet-data-prod.sql" Transacted="False" />
              </Object>
            </ObjectGroup>
          </Objects>
        </PublishDatabaseSettings>
        <EnableMSDeployBackup>False</EnableMSDeployBackup>
      </PropertyGroup>
      <ItemGroup>
        <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String">
          <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue>
        </MSDeployParameterValue>
        <MSDeployParameterValue Include="$(DeployParameterPrefix)SchoolContext-Web.config Connection String">
          <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue>
        </MSDeployParameterValue>
      </ItemGroup>
      <Target Name="CustomCollectFiles">
        <ItemGroup>
          <_CustomFiles Include="..\ExtraFiles\**\*" />
          <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
          </FilesForPackagingFromProject>
        </ItemGroup>
      </Target>
      <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
    
        <CopyAllFilesToSingleFolderForMsdeployDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
        </CopyAllFilesToSingleFolderForMsdeployDependsOn>
      </PropertyGroup>
    </Project>
    
  4. Speichern und schließen Sie die Datei Staging.pubxml .

Veröffentlichen im Staging

Veröffentlichen Sie die Anwendung mithilfe des Stagingprofils mithilfe der Veröffentlichung mit einem Klick oder über die Befehlszeile.

Wenn Sie die Veröffentlichung mit einem Klick verwenden, können Sie im Vorschaufenster überprüfen, ob robots.txt kopiert wird. Verwenden Sie andernfalls Ihr FTP-Tool, um zu überprüfen, ob sich die robots.txt-Datei nach der Bereitstellung im Stammordner der Website befindet.

Zusammenfassung

Dadurch wird diese Reihe von Tutorials zum Bereitstellen einer ASP.NET Webanwendung für einen Hostinganbieter eines Drittanbieters abgeschlossen. Weitere Informationen zu den Themen, die in diesen Tutorials behandelt werden, finden Sie unter ASP.NET Bereitstellungsinhaltszuordnung.

Weitere Informationen

Wenn Sie wissen, wie Sie mit MSBuild-Dateien arbeiten, können Sie viele andere Bereitstellungsaufgaben automatisieren, indem Sie Code in PUBXML-Dateien (für profilspezifische Aufgaben) oder die Projektdatei .wpp.targets (für Aufgaben schreiben, die für alle Profile gelten). Weitere Informationen zu PUBXML - und WPP.TARGETS-Dateien finden Sie unter Vorgehensweise: Bearbeiten von Bereitstellungseinstellungen in Veröffentlichungsprofildateien (PUBXML)-Dateien und der WPP.targets-Datei in Visual Studio-Webprojekten. Eine grundlegende Einführung in MSBuild-Code finden Sie unter The Anatomy of a Project File in Enterprise Deployment Series: Understanding the Project File. Informationen zum Arbeiten mit MSBuild-Dateien zum Ausführen von Aufgaben für Ihre eigenen Szenarien finden Sie in diesem Buch: Inside the Microsoft-Build-Engine: Using MSBuild and Team Foundation Build by Sayed Ibraham Hashimi and William Bartholomew.

Danksagung

Ich möchte den folgenden Personen danken, die wichtige Beiträge zum Inhalt dieser Tutorialreihe gemacht haben: