Visual Studio kullanarak Web Dağıtımı ASP.NET: Ek Dosya Dağıtma

tarafından Tom Dykstra

Başlangıç Projelerini İndir

Bu öğretici serisi, Visual Studio 2012 veya Visual Studio 2010 kullanarak bir ASP.NET web uygulamasını Azure App Service Web Apps veya üçüncü taraf barındırma sağlayıcısına dağıtmayı (yayımlamayı) gösterir. Seri hakkında bilgi için serideki ilk öğreticiye bakın.

Genel Bakış

Bu öğreticide, dağıtım sırasında ek bir görev yapmak için Visual Studio web yayımlama işlem hattının nasıl uzatılması gösterilmektedir. Görev, proje klasöründe olmayan ek dosyaları hedef web sitesine kopyalamaktır.

Bu öğretici için ek bir dosya kopyalayacaksınız: robots.txt. Bu dosyayı hazırlamaya dağıtmak istiyor ancak üretim ortamına dağıtmak istemiyorsunuz. Üretime Dağıtma öğreticisinde, bu dosyayı projeye eklediniz ve Üretim yayımlama profilini dışlayacak şekilde yapılandırmıştınız. Bu öğreticide, dağıtmak istediğiniz ancak projeye dahil etmek istemediğiniz dosyalar için yararlı olacak bu durumu işlemek için alternatif bir yöntem göreceksiniz.

robots.txt dosyasını taşıma

robots.txtfarklı bir işleme yöntemine hazırlanmak için, öğreticinin bu bölümünde dosyayı projeye dahil olmayan bir klasöre taşır ve hazırlama ortamından robots.txt silersiniz. Dosyayı hazırlamadan silmek gerekir, böylece dosyayı bu ortama dağıtmaya yönelik yeni yönteminizin düzgün çalıştığını doğrulayabilirsiniz.

  1. Çözüm Gezgini'darobots.txt dosyasına sağ tıklayın ve Projeden Dışla'ya tıklayın.

  2. Windows Dosya Gezgini kullanarak çözüm klasöründe yeni bir klasör oluşturun ve ExtraFiles olarak adlandırın.

  3. robots.txt dosyasını ContosoUniversity proje klasöründen ExtraFiles klasörüne taşıyın.

    ExtraFiles klasörü

  4. FTP aracınızı kullanarak hazırlama web sitesinden robots.txt dosyasını silin.

    Alternatif olarak, Hazırlama yayımlama profilinin Ayarlar sekmesindeki Dosya Yayımlama Seçenekleri'nin altında Hedefte ek dosyaları kaldır'ı seçebilir ve hazırlamaya yeniden yayımlayabilirsiniz.

Yayımlama profili dosyasını güncelleştirme

Yalnızca hazırlamada robots.txt ihtiyacınız olduğundan, bunu dağıtmak için güncelleştirmeniz gereken tek yayımlama profili Hazırlama'dır.

  1. Visual Studio'da Staging.pubxml dosyasını açın.

  2. Dosyanın sonuna, kapanış </Project> etiketinden önce aşağıdaki işaretlemeyi ekleyin:

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

    Bu kod, dağıtılacak ek dosyaları toplayacak yeni bir hedef oluşturur. Hedef, MSBuild'in belirttiğiniz koşullara göre yürüteceği bir veya daha fazla görevden oluşur.

    özniteliği, Include dosyaları bulabileceğiniz klasörün, proje klasörüyle aynı düzeyde bulunan ExtraFiles olduğunu belirtir. MSBuild bu klasörden tüm dosyaları toplar ve herhangi bir alt klasörden özyinelemeli olarak (çift yıldız işareti özyinelemeli alt klasörleri belirtir). Bu kodla, ExtraFiles klasörünün içindeki alt klasörlere birden çok dosya ve dosya koyabilirsiniz ve hepsi dağıtılır.

    DestinationRelativePath öğesi, klasörlerin ve dosyaların ExtraFiles klasöründe bulunan dosya ve klasör yapısında hedef web sitesinin kök klasörüne kopyalanması gerektiğini belirtir. ExtraFiles klasörünün kendisini kopyalamak isterseniz, DestinationRelativePath değer ExtraFiles\%(RecursiveDir)%(Dosyaadı)%(Uzantı) olur.

  3. Dosyanın sonuna, kapanış </Project> etiketinden önce, yeni hedefin ne zaman yürütüleceğini belirten aşağıdaki işaretlemeyi ekleyin.

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

    Bu kod, dosyaları hedef klasöre kopyalayan hedef her yürütülürken yeni CustomCollectFiles hedefin yürütülmesine neden olur. Yayımlama ve dağıtım paketi oluşturma için ayrı bir hedef vardır ve yayımlamak yerine dağıtım paketi kullanarak dağıtmaya karar vermeniz durumunda her iki hedefe de yeni hedef eklenir.

    .pubxml dosyası artık aşağıdaki örneğe benzer:

    <?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. Staging.pubxml dosyasını kaydedin ve kapatın.

Hazırlamaya yayımlama

Tek tıklamayla yayımla veya komut satırını kullanarak Hazırlama profilini kullanarak uygulamayı yayımlayın.

Tek tıklamayla yayımla özelliğini kullanırsanız Önizleme penceresinde robots.txt kopyalandığını doğrulayabilirsiniz. Aksi takdirde, robots.txt dosyasının dağıtımdan sonra web sitesinin kök klasöründe olduğunu doğrulamak için FTP aracınızı kullanın.

Özet

Bu, bir ASP.NET web uygulamasını üçüncü taraf barındırma sağlayıcısına dağıtmaya yönelik bu öğretici serisini tamamlar. Bu öğreticilerde ele alınan konulardan herhangi biri hakkında daha fazla bilgi için bkz. ASP.NET Dağıtım İçeriği Eşlemesi.

Daha fazla bilgi

MSBuild dosyalarıyla nasıl çalışacağınızı biliyorsanız, .pubxml dosyalarına (profile özgü görevler için) veya project .wpp.targets dosyasına (tüm profillere uygulanan görevler için) kod yazarak diğer birçok dağıtım görevini otomatikleştirebilirsiniz. .pubxml ve .wpp.targets dosyaları hakkında daha fazla bilgi için bkz. Nasıl yapılır: Yayımlama Profili (.pubxml) Dosyalarında Dağıtım Ayarlarını Düzenleme ve Visual Studio Web Projelerinde .wpp.targets Dosyası. MSBuild koduna temel bir giriş için bkz. Kurumsal Dağıtım Serisinde Proje Dosyasının Anatomisi: Proje Dosyasını Anlama. Kendi senaryolarınızda görev gerçekleştirmek üzere MSBuild dosyalarıyla çalışmayı öğrenmek için şu kitapa bakın: inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build by Sayed Ibraham Hashimi and William Bartholomew.

Teşekkürler

Bu öğretici serisinin içeriğine önemli katkılarda bulunan aşağıdaki kişilere teşekkür etmek istiyorum: