Udostępnij za pośrednictwem


ASP.NET wdrażanie w Internecie przy użyciu programu Visual Studio: wdrażanie dodatkowych plików

Autor : Tom Dykstra

Pobierz projekt startowy

W tej serii samouczków pokazano, jak wdrożyć (opublikować) aplikację internetową ASP.NET w celu Azure App Service Web Apps lub dostawcy hostingu innej firmy przy użyciu programu Visual Studio 2012 lub Visual Studio 2010. Aby uzyskać informacje o serii, zobacz pierwszy samouczek z serii.

Omówienie

W tym samouczku pokazano, jak rozszerzyć potok publikowania w sieci Web programu Visual Studio w celu wykonania dodatkowego zadania podczas wdrażania. Zadanie polega na skopiowaniu dodatkowych plików, które nie znajdują się w folderze projektu do docelowej witryny sieci Web.

W tym samouczku skopiujesz jeden dodatkowy plik: robots.txt. Chcesz wdrożyć ten plik w środowisku przejściowym, ale nie w środowisku produkcyjnym. W samouczku Wdrażanie w środowisku produkcyjnym ten plik został dodany do projektu i skonfigurowano profil publikowania produkcyjnego, aby go wykluczyć. W tym samouczku zobaczysz alternatywną metodę obsługi tej sytuacji, która będzie przydatna w przypadku wszystkich plików, które chcesz wdrożyć, ale nie chcesz uwzględniać w projekcie.

Przenoszenie pliku robots.txt

Aby przygotować się do innej metody obsługi robots.txt, w tej sekcji samouczka przeniesiesz plik do folderu, który nie jest uwzględniony w projekcie, i usuniesz robots.txt ze środowiska przejściowego. Należy usunąć plik ze środowiska przejściowego, aby sprawdzić, czy nowa metoda wdrażania pliku w tym środowisku działa prawidłowo.

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy plik robots.txt i kliknij polecenie Wyklucz z projektu.

  2. Korzystając z systemu Windows Eksplorator plików, utwórz nowy folder w folderze rozwiązania i nadaj mu nazwę ExtraFiles.

  3. Przenieś plik robots.txt z folderu projektu ContosoUniversity do folderu ExtraFiles .

    Folder ExtraFiles

  4. Za pomocą narzędzia FTP usuń plik robots.txt z przejściowej witryny internetowej.

    Alternatywnie możesz wybrać pozycję Usuń dodatkowe pliki w lokalizacji docelowej w obszarze Opcje publikowania plików na karcie Ustawienia profilu publikowania przejściowego i opublikować je ponownie w środowisku przejściowym.

Aktualizowanie pliku profilu publikowania

Wystarczy robots.txt w środowisku przejściowym, więc jedynym profilem publikowania, który należy zaktualizować, aby go wdrożyć, jest staging.

  1. W programie Visual Studio otwórz plik Staging.pubxml.

  2. Na końcu pliku przed tagiem zamykającym </Project> dodaj następujące znaczniki:

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

    Ten kod tworzy nowy element docelowy , który będzie zbierał dodatkowe pliki do wdrożenia. Obiekt docelowy składa się z co najmniej jednego zadania, które program MSBuild będzie wykonywany na podstawie określonych warunków.

    Atrybut Include określa, że folder, w którym można znaleźć pliki, to ExtraFiles, znajdujący się na tym samym poziomie co folder projektu. Program MSBuild będzie zbierać wszystkie pliki z tego folderu i rekursywnie z dowolnych podfolderów (podwójna gwiazdka określa cykliczne podfoldery). Za pomocą tego kodu można umieścić wiele plików i plików w podfolderach w folderze ExtraFiles , a wszystkie zostaną wdrożone.

    Element DestinationRelativePath określa, że foldery i pliki powinny być kopiowane do folderu głównego docelowej witryny sieci Web w tej samej strukturze plików i folderów, co znajdują się w folderze ExtraFiles . Jeśli chcesz skopiować sam folder ExtraFiles , DestinationRelativePath wartość to ExtraFiles\%(RecursiveDir)%(Nazwa pliku)%(Rozszerzenie).

  3. Na końcu pliku przed tagiem zamykającym </Project> dodaj następujący znacznik, który określa, kiedy należy wykonać nowy element docelowy.

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

    Ten kod powoduje wykonanie nowego CustomCollectFiles miejsca docelowego za każdym razem, gdy obiekt docelowy kopiuje pliki do folderu docelowego. Istnieje oddzielny element docelowy do tworzenia pakietów publikowania i wdrażania, a nowy element docelowy jest wstrzykiwany w obu miejscach docelowych w przypadku, gdy zdecydujesz się wdrożyć przy użyciu pakietu wdrożeniowego zamiast publikowania.

    Plik .pubxml wygląda teraz jak w poniższym przykładzie:

    <?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. Zapisz i zamknij plik Staging.pubxml .

Publikowanie w środowisku przejściowym

Za pomocą jednego kliknięcia opublikuj lub wiersz polecenia opublikuj aplikację przy użyciu profilu przejściowego.

Jeśli używasz publikowania jednym kliknięciem, możesz sprawdzić w oknie podglądu , że robots.txt zostaną skopiowane. W przeciwnym razie użyj narzędzia FTP, aby sprawdzić, czy plik robots.txt znajduje się w folderze głównym witryny sieci Web po wdrożeniu.

Podsumowanie

Ta seria samouczków obejmuje wdrażanie aplikacji internetowej ASP.NET u dostawcy hostingu innej firmy. Aby uzyskać więcej informacji na temat dowolnych tematów omówionych w tych samouczkach, zobacz ASP.NET mapa zawartości wdrożenia.

Więcej informacji

Jeśli wiesz, jak pracować z plikami MSBuild, możesz zautomatyzować wiele innych zadań wdrażania, pisząc kod w plikach pubxml (w przypadku zadań specyficznych dla profilu) lub pliku wpp.targets projektu (w przypadku zadań, które mają zastosowanie do wszystkich profilów). Aby uzyskać więcej informacji na temat plików .pubxml i .wpp.targets , zobacz How to: Edit Deployment Settings in Publish Profile (.pubxml) Files and the .wpp.targets File in Visual Studio Web Projects (Jak edytować ustawienia wdrażania w plikach profilu publikowania (.pubxml) i pliku .wpp.targets w projektach sieci Web programu Visual Studio. Aby zapoznać się z podstawowym wprowadzeniem do kodu MSBuild, zobacz Anatomia pliku projektu w serii wdrażania w przedsiębiorstwie: Opis pliku projektu. Aby dowiedzieć się, jak pracować z plikami MSBuild w celu wykonywania zadań na potrzeby własnych scenariuszy, zobacz tę książkę: Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build by Sayed Ibraham Hashimi and William Bartholomew (Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build by Sayed Ibraham Hashimi and William Bartholomew ( Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build by Sayed Ibraham Hashimi and William Bartholomew (Tworzenie za pomocą narzędzi MSBuild i Team Foundation Build by Sayed Ibraham Hashimi i William Bartholomew).

Podziękowania

Chciałbym podziękować następującym osobom, które wniosły znaczący wkład w zawartość tej serii samouczków: