ASP.NET wdrażanie w Internecie przy użyciu programu Visual Studio: wdrażanie dodatkowych plików
Autor : Tom Dykstra
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.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy plik robots.txt i kliknij polecenie Wyklucz z projektu.
Korzystając z systemu Windows Eksplorator plików, utwórz nowy folder w folderze rozwiązania i nadaj mu nazwę ExtraFiles.
Przenieś plik robots.txt z folderu projektu ContosoUniversity do folderu ExtraFiles .
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.
W programie Visual Studio otwórz plik Staging.pubxml.
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).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>
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:
- Alberto Poblacion, MVP & MCT, Hiszpania
- Jarod Ferguson, MVP rozwoju platformy danych, Stany Zjednoczone
- Ostre mittal, Microsoft
- Jon Galloway (twitter: @jongalloway)
- Kristina Olson, Microsoft
- Mike Pope, Microsoft
- Mohit Srivastava, Microsoft
- Raffaele Rialdi, Włochy
- Rick Anderson, Microsoft
- Sayed Hashimi, Microsoft (twitter: @sayedihashimi)
- Scott Hanselman (twitter: @shanselman)
- Scott Hunter, Microsoft (twitter: @coolcsh)
- Srđan Božkov, Serbia
- Vishal Joshi, Microsoft (twitter: @vishalrjoshi)