ASP.NET webbdistribution med Visual Studio: Distribuera extra filer

av Tom Dykstra

Ladda ned Startprojekt

Den här självstudieserien visar hur du distribuerar (publicerar) en ASP.NET webbapp till Azure App Service Web Apps eller till en tredjepartsvärdleverantör med hjälp av Visual Studio 2012 eller Visual Studio 2010. Information om serien finns i den första självstudien i serien.

Översikt

Den här självstudien visar hur du utökar Visual Studio-webbpubliceringspipelinen för att utföra ytterligare en uppgift under distributionen. Uppgiften är att kopiera extra filer som inte finns i projektmappen till målwebbplatsen.

I den här självstudien kopierar du en extra fil: robots.txt. Du vill distribuera den här filen till mellanlagring men inte till produktion. I självstudien Distribuera till produktion lade du till den här filen i projektet och konfigurerade publiceringsprofilen Produktion för att exkludera den. I den här självstudien ser du en alternativ metod för att hantera den här situationen, en metod som är användbar för alla filer som du vill distribuera men inte vill inkludera i projektet.

Flytta filen robots.txt

Om du vill förbereda för en annan metod för att hantera robots.txti det här avsnittet av självstudien flyttar du filen till en mapp som inte ingår i projektet och tar bort robots.txt från mellanlagringsmiljön. Du måste ta bort filen från mellanlagringen så att du kan kontrollera att den nya metoden för att distribuera filen till den miljön fungerar korrekt.

  1. Högerklicka på filenrobots.txt i Solution Explorer och klicka på Exkludera från projekt.

  2. Använd Utforskaren i Windows och skapa en ny mapp i lösningsmappen och ge den namnet ExtraFiles.

  3. Flytta robots.txt-filen från projektmappen ContosoUniversity till mappen ExtraFiles .

    ExtraFiles-mapp

  4. Ta bort robots.txt-filen från mellanlagringswebbplatsen med hjälp av FTP-verktyget.

    Alternativt kan du välja Ta bort ytterligare filer på målet under Alternativ för filpublicering på fliken Inställningar i Mellanlagringspubliceringsprofilen, och publicera om till mellanlagring.

Uppdatera publiceringsprofilfilen

Du behöver bara robots.txt i testmiljön, så den enda publiceringsprofil du behöver uppdatera för att distribuera den är Staging.

  1. Öppna Staging.pubxml i Visual Studio.

  2. Lägg till följande markering före den avslutande </Project> taggen i slutet av filen:

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

    Den här koden skapar ett nytt mål som samlar in ytterligare filer som ska distribueras. Ett mål består av en eller flera uppgifter som MSBuild ska köra baserat på de villkor som du anger.

    Attributet Include anger att mappen där filerna ska hittas är ExtraFiles, som finns på samma nivå som projektmappen. MSBuild samlar in alla filer från mappen och rekursivt från alla undermappar (den dubbla asterisken anger rekursiva undermappar). Med den här koden kan du placera flera filer och filer i undermappar i mappen ExtraFiles , och allt kommer att distribueras.

    Elementet DestinationRelativePath anger att mapparna och filerna ska kopieras till rotmappen på målwebbplatsen i samma fil- och mappstruktur som de finns i mappen ExtraFiles . Om du vill kopiera själva DestinationRelativePath skulle värdet vara ExtraFiles\%(RecursiveDir)%(Filename)%(Extension).

  3. I slutet av filen, före den avslutande </Project> taggen, lägger du till följande markering som anger när det nya målet ska köras.

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

    Den här koden gör att det nya CustomCollectFiles målet körs när målet som kopierar filer till målmappen körs. Det finns ett separat mål för att skapa publicerings- och distributionspaket och det nya målet matas in i båda målen om du bestämmer dig för att distribuera med hjälp av ett distributionspaket i stället för publicering.

    .pubxml-filen ser nu ut som i följande exempel:

    <?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. Spara och stäng filen Staging.pubxml .

Publicera till staging-miljö

Publicera applikationen med hjälp av ett-klikspublicering eller kommandoradsgränssnittet med stagingprofilen.

Om du använder publicera med ett klick kan du kontrollera i förhandsgranskningsfönstret att robots.txt kommer att kopieras. Annars kan du använda FTP-verktyget för att kontrollera att robots.txt filen finns i rotmappen på webbplatsen efter distributionen.

Sammanfattning

Detta slutför den här serien med självstudier om hur du distribuerar en ASP.NET webbapp till en värdleverantör från tredje part. Mer information om de ämnen som beskrivs i de här självstudierna finns i ASP.NET-distributionsinnehållskarta.

Mer information

Om du vet hur du arbetar med MSBuild-filer kan du automatisera många andra distributionsuppgifter genom att skriva kod i .pubxml-filer (för profilspecifika uppgifter) eller projektets .wpp.targets-fil (för uppgifter som gäller för alla profiler). Mer information om .pubxml - och .wpp.targets-filer finns i Så här: Redigera distributionsinställningar i Publicera profilfiler (.pubxml) och .wpp.targets-filen i Visual Studio Web Projects. En grundläggande introduktion till MSBuild-kod finns i The Anatomy of a Project File in Enterprise Deployment Series: Understanding the Project File (Anatomi för en projektfil i Enterprise Deployment Series: Understanding the Project File). Mer information om hur du arbetar med MSBuild-filer för att utföra uppgifter för dina egna scenarier finns i den här boken: Inuti Microsoft Build Engine: Använda MSBuild och Team Foundation Build av Sayed Ibraham Hashimi och William Bartholomew.

Erkännanden

Jag vill tacka följande personer som gjort betydande bidrag till innehållet i den här självstudieserien: