Автоматическое развертывание проекта веб-сайта ASP.NET с помощью сборки TFS 2013

У меня есть проект веб-сайта веб-форм ASP.NET (обратите внимание, что это НЕ проект веб-приложений, т. Е. Нет .csproj).

Я хочу выполнить автоматическое развертывание файловой системы в нашей сетевой папке.

Я создал профиль, и поэтому есть файл website.publishproj и профиль xml.

Я попытался добавить это в аргументы MSBuild в определении сборки:

website.publishproj / p: DeployOnBuild = true / p: PublishProfile = MyDevProfile /p:VisualStudioVersion=12.0

Я получаю такую ​​ошибку:

MSBUILD: ошибка MSB1008: можно указать только один проект. Переключатель: website.publishproj

Есть идеи, что я делаю не так? Я считаю, что это как-то связано с типом проекта «Веб-сайт».

Я прочитал следующее: Как использовать командную строку msbuild для развертывания проекта веб-сайта VS2012 без предварительной компиляции?

Вот команда:

C: \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ MSBuild.exe / nologo / noconsolelogger "E: \ Builds \ 1 \ TP1 \ MyWebsite_Dev \ src \ Websites \ MyWebsite \ MyWebsite.sln" / nr: False / fl /flp:"logfile=E:\Builds\1\TP1\MyWebsite_Dev\src\Websites\MyWebsite\MyWebsite.log;encoding=Unicode;verbosity=normal "/ p: SkipInvalidConfigurations = true website.publishproj / p: DeployOnBuild = true / p: PublishProfile = DropToDemoProfile /p:VisualStudioVersion=12.0 / m / p: OutDir = "E: \ Builds \ 1 \ TP1 \ MyWebsite_Dev \ bin \" / p: VCBuildOverride = "E: \ Builds \ 1 \ TP1 \ MyWebsite_Dev \ src \ Websites \ MyWebsite \ MyWebsite.sln.vsprops "/ dl: WorkflowCentralLogger," C: \ Program Files \ Microsoft Team Foundation Server 12.0 \ Tools \ Microsoft.TeamFoundation.Build.Server.Logger.dll ";" Подробность = Нормальный; BuildUri = vstfs: /// Build / Build / 35; IgnoreDuplicateProjects = False; InformationNodeId = 13; TargetsNotLogged = GetNativeManifest, GetCopyToOutputDirectoryItems, GetTargetPath; LogWarnings = True; TFSUrling = _1 \ Команда Microsoft Foundation Server 12.0 \ Tools \ Microsoft.TeamFoundation.Build.Server.Logger.dll ";" Verbosity = Normal; " / p: BuildId = "7d23530d-7349-406f-98b7-5d4f0b9f4101, vstfs: /// Build / Build / 35" /p:BuildLabel="MyWebsite_Dev_20141122.13 "/ p: BuildTimestamp =" Вс, 23 ноября 2014 г. 01: 22:05 GMT "/p:BuildSourceVersion="LMyWebsite_Dev_20141122.13@$/TP1" / p: BuildDefinition = "MyWebsite_Dev"


person gbs    schedule 23.11.2014    source источник


Ответы (2)


Вы пытаетесь построить решение (MyWebsite.sln) и проект (website.publishproj) одновременно как часть одной и той же команды MSBuild, по крайней мере, в соответствии с переданными аргументами.

Вы можете запустить msbuild website.publishproj /pp:website.pp.publishproj, чтобы увидеть, какие цели вы можете вызывать в website.pp.publishproj или какие свойства нужно переопределить.

Вы можете запустить set MSBUILDEMITSOLUTION=true && msbuild MyWebsite.sln, чтобы увидеть, какие цели вы можете вызывать в MyWebsite.sln.metaproj и MyWebsite.metaproj или какие свойства нужно переопределить.

Ваша команда DeployOnBuild в порядке и должна работать, я предполагаю, что ваша конфигурация сборки TFS указывает на .sln и передает website.publishproj в качестве аргумента, а не основную цель сборки, поэтому либо перенаправьте ее, чтобы напрямую построить .publishproj, либо ... ну, похоже, альтернативы нет, вы можете попробовать добавить новую конфигурацию и отредактировать .sln с новыми AspNetConfiguration и MyDevProfile.AspNetCompiler.TargetPath, но тогда вы просто напрашиваетесь на проблемы.

person Ilya Kozhevnikov    schedule 26.11.2014
comment
Первый пункт имеет смысл. Для 2-го и 3-го параграфов я этого не понимаю. С msbuild мало что сделал. 4-й пункт - я пытался добавить website.publishproj в список проектов сборки, но он тоже не работал. Я не помню ошибку, но могу повторить попытку и опубликовать сообщение. Скажем, я добавляю файл .targets на уровне решения и хочу добавить цель afterbuild, как будет выглядеть команда? Могу ли я установить сценарий postbuild в TFS? Если да, то как будет выглядеть этот сценарий? Спасибо. - person gbs; 26.11.2014
comment
@gbs публикует сообщение об ошибке сборки publishproj. 2/3 - это команды, которые вы можете использовать для предварительной обработки publishproj и выдачи sln, если вы хотите прочитать, что на самом деле выполняется MSBuild, и увидеть все цели, которые могут быть вызванными, свойства, доступные для переопределения, и т. д. Да, у вас может быть собственный сценарий сборки и все цели и события, которые вы хотите, которые, в свою очередь, создают sln и publishproj, почему бы и нет, команда остается прежней, просто передайте имя файла в MSBuild или настройте TFS для его создания. - person Ilya Kozhevnikov; 27.11.2014
comment
Я снова попытался добавить .publishproj в процесс сборки и удалил его из аргумента сборки. Теперь кажется, что он пытается развернуть на моем пути: \\ devserver \ www \ dropbuild \ mywebsite, но он дает доступ запрещен для этого пути. Я действительно дал разрешение на доступ к этой папке всем, не зная, что мне не хватает. - person gbs; 02.12.2014
comment
неважно ... Я добавил всех, но забыл предоставить полный контроль. Но теперь как правильно предоставить доступ к этой папке вместо использования «Все». Могу ли я создать отдельную учетную запись и запустить сборку TFS под этой учетной записью? - person gbs; 02.12.2014
comment
@gbs да, или вы можете предоставить его любой службе агента учетной записи, под которой работает, обычно сетевая служба. - person Ilya Kozhevnikov; 02.12.2014
comment
Доступна ли сетевая служба за пределами хост-машины? И это хорошая идея - дать разрешение этой учетной записи? - person gbs; 02.12.2014
comment
@gbs да, если в домене; не это не так, но иногда создание специальной учетной записи службы в большой задаче в корпоративной среде. - person Ilya Kozhevnikov; 02.12.2014

Вам необходимо обновить свой веб-сайт до веб-приложения, чтобы все это происходило автоматически.

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

Функциональность веб-сайта реализована уже более 10 лет. Хотя он все еще присутствует в продукте для обратной совместимости, я бы не рекомендовал его использовать.

person MrHinsh - Martin Hinshelwood    schedule 23.11.2014
comment
Да, но видите ли вы что-нибудь неправильное в приведенной выше команде? Большинство моих находок указывает на пространство на пути, которое я не мог найти. Путь аргументов сборки действительно работал у меня на одном из моих тестовых веб-сайтов, но не на моем реальном веб-сайте. - person gbs; 23.11.2014