ASP.NET веб-развертывание с помощью Visual Studio: развертывание дополнительных файлов
В этой серии руководств показано, как развернуть (опубликовать) веб-приложение ASP.NET для Служба приложений Azure веб-приложения или стороннего поставщика услуг размещения с помощью Visual Studio 2012 или Visual Studio 2010. Сведения о серии см. в первом руководстве этой серии.
Общие сведения
В этом руководстве показано, как расширить конвейер веб-публикации Visual Studio для выполнения дополнительных задач во время развертывания. Задача состоит в том, чтобы скопировать дополнительные файлы, которых нет в папке проекта, на целевой веб-сайт.
В этом руководстве вы скопируйте один дополнительный файл: robots.txt. Вы хотите развернуть этот файл в промежуточной среде, но не в рабочей среде. В учебнике Развертывание в рабочей среде вы добавили этот файл в проект и настроили профиль публикации в рабочей среде, чтобы исключить его. В этом руководстве вы увидите альтернативный метод для обработки этой ситуации, который будет полезен для любых файлов, которые вы хотите развернуть, но не хотите включать в проект.
Перемещение файла robots.txt
Чтобы подготовиться к другому методу обработки robots.txt, в этом разделе учебника вы переместите файл в папку, не включенную в проект, и удалите robots.txt из промежуточной среды. Необходимо удалить файл из промежуточного хранения, чтобы убедиться, что новый метод развертывания файла в этой среде работает правильно.
В Обозреватель решений щелкните правой кнопкой мыши файл robots.txt и выберите пункт Исключить из проекта.
С помощью Windows проводник создайте папку в папке решения и назовите ее ExtraFiles.
Переместите файл robots.txt из папки проекта ContosoUniversity в папку ExtraFiles .
С помощью средства FTP удалите файлrobots.txt с промежуточного веб-сайта.
В качестве альтернативы можно выбрать Удалить дополнительные файлы в месте назначения в разделе Параметры публикации файла на вкладке Параметры профиля промежуточной публикации и повторно опубликовать его в промежуточном режиме.
Обновление файла профиля публикации
Вам нужно толькоrobots.txt в промежуточном режиме, поэтому единственный профиль публикации, который необходимо обновить, чтобы развернуть его, — это промежуточная версия.
В Visual Studio откройте Staging.pubxml.
В конце файла перед закрывающим
</Project>
тегом добавьте следующую разметку:<Target Name="CustomCollectFiles"> <ItemGroup> <_CustomFiles Include="..\ExtraFiles\**\*" /> <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> </Target>
Этот код создает новый целевой объект , который будет собирать дополнительные файлы для развертывания. Целевой объект состоит из одной или нескольких задач, которые MSBuild будет выполнять в зависимости от заданных условий.
Атрибут
Include
указывает, что папка, в которой нужно найти файлы, — ExtraFiles, расположенная на том же уровне, что и папка проекта. MSBuild будет собирать все файлы из этой папки и рекурсивно из всех вложенных папок (двойная звездочка указывает рекурсивные вложенные папки). С помощью этого кода можно поместить несколько файлов и файлов во вложенные папки в папку ExtraFiles , и все они будут развернуты.Элемент
DestinationRelativePath
указывает, что папки и файлы должны быть скопированы в корневую папку целевого веб-сайта в той же структуре файлов и папок, что и в папке ExtraFiles . Если вы хотите скопировать саму папку ExtraFiles ,DestinationRelativePath
значением будет ExtraFiles\%(RecursiveDir)%(Filename)%(Extension).В конце файла перед закрывающим
</Project>
тегом добавьте следующую разметку, указывающую, когда следует выполнить новый целевой объект.<PropertyGroup> <CopyAllFilesToSingleFolderForPackageDependsOn> CustomCollectFiles; $(CopyAllFilesToSingleFolderForPackageDependsOn); </CopyAllFilesToSingleFolderForPackageDependsOn> <CopyAllFilesToSingleFolderForMsdeployDependsOn> CustomCollectFiles; $(CopyAllFilesToSingleFolderForMsdeployDependsOn); </CopyAllFilesToSingleFolderForMsdeployDependsOn> </PropertyGroup>
Этот код вызывает выполнение нового
CustomCollectFiles
целевого объекта при каждом выполнении целевого объекта, копирующий файлы в целевую папку. Существует отдельный целевой объект для публикации и создания пакета развертывания, и новый целевой объект внедряется в оба целевых объекта, если вы решите развернуть с помощью пакета развертывания вместо публикации.PUBXML-файл теперь выглядит следующим образом:
<?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>
Сохраните и закройте файл Staging.pubxml .
Публикация на промежуточном сайте
Опубликуйте приложение одним щелчком мыши или в командной строке с помощью промежуточного профиля.
Если вы используете публикацию одним щелчком, в окне предварительного просмотра можно проверить, будет ли скопированаrobots.txt . В противном случае используйте средство FTP, чтобы убедиться, что файлrobots.txt находится в корневой папке веб-сайта после развертывания.
Сводка
На этом показано, как развернуть веб-приложение ASP.NET стороннему поставщику услуг размещения. Дополнительные сведения о любом из разделов, описанных в этих руководствах, см. в разделе Карта содержимого развертывания ASP.NET.
Дополнительные сведения
Если вы знаете, как работать с файлами MSBuild, можно автоматизировать многие другие задачи развертывания, написав код в PUBXML-файлах (для задач, относящихся к конкретному профилю) или wpp.targets-файле проекта (для задач, которые применяются ко всем профилям). Дополнительные сведения о файлах PUBXML и WPP.TARGETS см. в разделах Практическое руководство. Изменение параметров развертывания в файле профиля публикации (PUBXML) и файле WPP.targets в веб-проектах Visual Studio. Основные сведения о коде MSBuild см. в статье Анатомия файла проекта в корпоративной серии развертывания: общие сведения о файле проекта. Сведения о том, как работать с файлами MSBuild для выполнения задач в собственных сценариях, см. в этой книге: Внутри Microsoft Build Engine: использование MSBuild и Team Foundation Build Сайеда Ибрахэма Хашими и Уильяма Бартоломея.
Благодарности
Я хотел бы поблагодарить следующих людей, которые внесли значительный вклад в содержание этой серии учебников:
- Альберто Побласьон, MVP & MCT, Испания
- Джарод Фергюсон (Jarod Ferguson), MVP по разработке платформы данных, США
- Харш Миттал, Майкрософт
- Джон Галлоуэй (twitter: @jongalloway)
- Кристина Олсон (Kristina Olson), Майкрософт
- Майк Поуп(Mike Pope), Корпорация Майкрософт
- Мохит Шривастава, Майкрософт
- Раффаэле Риальди, Италия
- Рик Андерсон (Rick Anderson), Майкрософт
- Сайед Хашими, Microsoft(twitter: @sayedihashimi)
- Скотт Хансельман (twitter: @shanselman)
- Скотт Хантер, Майкрософт (twitter: @coolcsh)
- Срджан Божович, Сербия
- Vishal Joshi, Microsoft (twitter: @vishalrjoshi)