Freigeben über


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

Von Tom Dykstra

Startprojekt herunterladen

In dieser Lernprogrammreihe wird gezeigt, wie Sie eine ASP.NET Webanwendung mit Azure App Service Web Apps oder einem Drittanbieter mit Visual Studio 2012 oder Visual Studio 2010 bereitstellen (veröffentlichen). Informationen zur Reihe finden Sie im ersten Lernprogramm in der Reihe.

Übersicht

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

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

Verschieben der robots.txt-Datei

Um sich auf eine andere Methode zur Behandlung von robots.txt vorzubereiten, verschieben Sie die Datei in diesem Abschnitt des Tutorials 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 die neue Methode der Bereitstellung der Datei in dieser Umgebung ordnungsgemäß funktioniert.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die robots.txt Datei, und klicken Sie auf "Von Projekt ausschließen".

  2. Erstellen Sie mit dem Windows-Datei-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 ".

    ExtraFiles-Ordner

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

    Alternativ können Sie die Option Weitere Dateien am Ziel entfernen in den Dateiveröffentlichungsoptionen auf der Registerkarte Einstellungen des Staging-Veröffentlichungsprofils auswählen und erneut in der Stagingphase veröffentlichen.

Aktualisieren der Veröffentlichungsprofildatei

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

  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 , mit dem zusätzliche Dateien gesammelt werden, die bereitgestellt werden sollen. Ein Ziel besteht aus einer oder mehreren Aufgaben, die MSBuild basierend auf von Ihnen angegebenen Bedingungen ausführt.

    Das Include Attribut gibt an, dass der Ordner, in dem die Dateien gefunden werden sollen , ExtraFiles ist, die sich auf derselben Ebene wie der Projektordner befinden. 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 " einfügen, und alle werden bereitgestellt.

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

  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 Veröffentlichung im Vergleich zur Erstellung von Bereitstellungspaketen, und das neue Ziel wird in beide Ziele eingefügt, falls Sie sich entscheiden, ein Bereitstellungspaket anstelle der Veröffentlichung zu verwenden.

    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 Staging.pubxml-Datei .

Auf Staging veröffentlichen

Veröffentlichen Sie die Anwendung entweder per Ein-Klick-Veröffentlichung oder über die Befehlszeile mithilfe des Staging-Profils.

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

Dies schließt diese Reihe von Lernprogrammen zum Bereitstellen einer ASP.NET Webanwendung auf einem Drittanbieterhostinganbieter ab. Weitere Informationen zu den in diesen Lernprogrammen behandelten Themen finden Sie in der 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 Projekt-WPP.targets-Datei (für Vorgänge, die für alle Profile gelten) schreiben. Weitere Informationen zu .pubxml- und .wpp.targets-Dateien finden Sie in So bearbeiten Sie Bereitstellungseinstellungen in Veröffentlichungsprofilen (.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 der Serie 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 danke den folgenden Personen, die bedeutende Beiträge zu den Inhalten dieser Lernprogrammreihe geleistet haben: