Сервер сборки 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) ранее в файле.

Я рекомендую создать резервную копию файла перед его изменением (файл также имеет комментарий вверху, предлагающий это).

Я предполагаю, что правильным решением было бы установить некоторую переменную среды или значение реестра.

Другие вопросы по тегам