Сервер сборки TFS не может заставить работать профиль публикации: "Не удается найти действительный путь AspnetCompilerPath"
У меня есть решение с кучей веб-проектов, и я хочу, чтобы мой сервер сборки автоматически создавал пакеты для каждого проекта. Я могу получить (почти) все, что работает. Сборки в порядке, и пакеты будут создаваться при каждой сборке. Но только когда я не указываю PublishProfile в аргументах MSBuild. Поэтому он будет вставлять только значения по умолчанию, а не прекомпилировать мои веб-сайты и тому подобное.
(Аргументы /p:DeployOnBuild=True /p:IsAutoBuild=True /p:VisualStudioVersion=12.0
)
Однако я хочу использовать профили публикации (.pubxml), которые я создал в Visual Studio. Каждый проект имеет "Test.pubxml". Но когда я укажу параметр PublishProfile, сборка завершится неудачно со следующим сообщением об ошибке (Аргументы /p:DeployOnBuild=True;PublishProfile=Test /p:IsAutoBuild=True /p:VisualStudioVersion=12.0
):
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets (411): Can't find the valid AspnetCompilerPath
Да, файл Microsoft.Web.Publishing.AspNetCompileMerge.targets
существует в этой папке. Я могу развернуть проекты из Visual Studio на моей машине разработчика просто отлично.
Я использую следующее: Windows Server 2012 R2 Visual Studio Ultimate 2013, обновление 1 (установлено на сервере сборки) Проекты для.Net 4.5.1
2 ответа
У меня была та же проблема, я нашел этот вопрос и придумал немного менее хакерское решение:
Просто добавь /P:Framework40Dir=c:\windows\microsoft.net\framework\v4.0.30319
в качестве дополнительного параметра MSBuild.
Нет необходимости редактировать файлы.targets или устанавливать что-либо еще. Работал на меня, поэтому я просто делаю:
msbuild MyWebProject.csproj /T:Package /P:PublishProfile=MyProfile /P:Framework40Dir=(as above)
Я использую его для создания пакета Web Deploy в подпапке по своему выбору - без профиля, он идет в obj/debug/package
, Кто пользуется obj
? Блерг:)
Я получил ту же ошибку и обошел ее с небольшим количеством взлома.
Я отредактировал файл Microsoft.Web.Publishing.AspNetCompileMerge.targets.
Найдите узел AspnetCompilerPath и замените $(Framework40Dir) на C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319.
Я полагаю, вы могли бы установить значение $(Framework40Dir) ранее в файле.
Я рекомендую создать резервную копию файла перед его изменением (файл также имеет комментарий вверху, предлагающий это).
Я предполагаю, что правильным решением было бы установить некоторую переменную среды или значение реестра.