Как получить сборку TFS для предварительной компиляции веб-приложения с использованием сохраненного профиля публикации?

В настоящее время я запускаю сборку и развертывание CI с использованием TFS 2013 для сборки и Release Management 2013 для развертывания, хотя мне нужны веб-приложения (WebForms), которые я развертываю, для предварительной компиляции. Я хочу использовать профиль публикации для управления предварительной компиляцией до того, как выходные данные будут скопированы в место размещения, но я еще не нашел ничего, что могло бы это сделать.

Найдя как мне настроить MSBuild для использовать сохраненный publishProfile для WebDeploy? , я настроил профиль публикации в своем веб-приложении, который будет предварительно компилировать веб-приложение, если я использую msbuild.exe с помощью командной строки разработчика для VS2013.

msbuild.exe WebSite.csproj /p:DeployOnBuild=true /p:PublishProfile=TfsPrecompile

Профиль публикации с именем TfsPrecompile с некоторой помощью https://stackoverflow.com/a/13267694/595473

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <WebPublishMethod>FileSystem</WebPublishMethod>
        <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish />
        <ExcludeApp_Data>False</ExcludeApp_Data>
        <PublishUrl>$(MSBuildProjectDirectory)\PublishDirectory</PublishUrl>
        <DeleteExistingFiles>True</DeleteExistingFiles>
        <PrecompileBeforePublish>True</PrecompileBeforePublish>
        <EnableUpdateable>False</EnableUpdateable>
        <DebugSymbols>False</DebugSymbols>
        <WDPMergeOption>DonotMerge</WDPMergeOption>
    </PropertyGroup>
</Project>

Запустив MSBuild локально, я получаю предварительно скомпилированный сайт в новой папке PublishDirectory, и, похоже, все прошло хорошо.

Чтобы связать TFS и управление релизами, я использую шаблон ReleaseTfvcTemplate.12.xaml.

Сборка > Проекты: $/Insert_Directory_Here/WebSite.csproj

Дополнительно > Аргументы MSBuild: /p:DeployOnBuild=true /p:PublishProfile=TfsPrecompile

Когда я запускаю сборку с аргументами MSBuild, нет существенной разницы во времени в девятиминутной сборке по сравнению со сборкой без аргументов прекомпиляции. Когда я запускаю MSBuild локально, я вижу прокручиваемые ссылки на ASPNETCOMPILER, хотя я не вижу ссылок на ASPNETCOMPILER или aspnet_compiler ни в одном из журналов диагностики TFS.


person CosworthTC    schedule 22.11.2014    source источник
comment
Если вы запустите сборку с подробным описанием журнала сборки или диагностикой, увидите ли вы какие-либо предупреждения, связанные с компилятором ASP .NET? Это звучит очень знакомо.   -  person Daniel Mann    schedule 22.11.2014
comment
Вы устанавливаете свойство VisualStudioVersion? Дополнительные сведения см. на странице sedodream.com/.   -  person Sayed Ibrahim Hashimi    schedule 23.11.2014
comment
@DanielMann @SayedIbrahimHashimi Сейчас я использую /flp:verbosity=diagnostic /p:VisualStudioVersion=12.0 /p:DeployOnBuild=true /p:PublishProfile=TfsPrecompile в аргументах Build›Advanced›MSBuild, хотя я не заметил никакой разницы в файлах на сервере сборки или в месте размещения. Файлы журнала имеют тот же размер, что и раньше, и кажется, что все сборки теперь регистрируются на уровне диагностики в 2013 году. В файле WebSite.log я вижу DeployOnBuild = true и PublishProfile = TfsPrecompile в разделе 1>Project C: \Builds\1\DIRECTORY\WebSite.csproj на узле 1 (цели по умолчанию).   -  person CosworthTC    schedule 23.11.2014


Ответы (2)


Оказалось, что в блоке сборки нет всех целей, необходимых для выполнения публикации, поэтому он просто проигнорировал это.

Ответ от https://social.msdn.microsoft.com/Forums/vstudio/en-US/c2d10c74-ed44-4635-acb9-ab08612701e2/deployonbuild-not-working?forum=tfsbuild

Ну наконец то! У меня есть решение. Независимо от того, выполняете ли вы развертывание из Team Build или используете MSBuild напрямую, вам потребуется скопировать цели MSBuild на компьютер сборки, чтобы публикация прошла успешно.

Мы не устанавливаем Visual Studio на нашу сборочную машину (пустая трата лицензии), однако мы устанавливаем оболочку Visual Studio. Кажется, оболочка устанавливает некоторые цели MSBuild, но не все, и уж точно не Publishing.

Поэтому на машине с установленным VS перейдите в C:\Program Files (x86)\MSBuild\Microsoft

Скопируйте всю эту папку на свою сборочную машину и замените там ту же папку. Может быть, сначала сделайте резервную копию оригинала. Вы также, вероятно, могли бы выяснить, какие именно цели вам действительно нужны...

Это исправило это для меня!

person CosworthTC    schedule 23.11.2014
comment
Возможно, стоит перепроверить, поскольку я не думаю, что для развертывания VS на сервере сборки требуется лицензия, если вы используете ее только для облегчения сборки. - person Eric Kramer; 05.06.2015

Я считаю, что в шаблонах Release есть ошибка, которая влияет на предварительную компиляцию веб-сайтов. Попробуйте использовать шаблон по умолчанию и вместо этого добавьте биты RM вручную.

http://blogs.msdn.com/b/visualstudioalm/archive/2013/12/09/how-to-modify-the-build-process-template-to-use-the-option-trigger-release-from-build.aspx

Сначала переключитесь на шаблон по умолчанию и убедитесь, что он работает так, как вы хотите. Затем следуйте по тропе выше.

person MrHinsh - Martin Hinshelwood    schedule 22.11.2014
comment
Шаблоны релизов построены нормально. В шаблонах релизов есть/была ошибка, из-за которой не выгружались токенизированные файлы конфигурации в папке _PublishedWebsites, но не более того. Это была чисто проблема со стороны выпуска. Шаблон выпуска по умолчанию в основном идентичен шаблону по умолчанию, за исключением того, что он добавляет два небольших раздела логики, которые связаны исключительно с проблемами выпуска. Сборка вообще не тронута. - person Daniel Mann; 22.11.2014
comment
Так ваше сатинирование сломано? Если он не меняет токенизированные конфигурации в шаблонах выпуска, то он не работает как по умолчанию! - person MrHinsh - Martin Hinshelwood; 23.11.2014