MSBuild: error MSB4057: The target "PipelineTransformPhase" does not exist in the project. Продолжение.

В прошлый раз я описал причину этой ошибки. Оказалось что это не единственный источник ошибки.

Эта ошибка возникает при публикации проекта предназначенного для разворачивания в Windows Azure. Для того чтоб было с чем экспериментировать создал проект AzureApp, содержащий WebRole – проект MvcApplication1. Загрузить его можно отсюда.

Связана она с тем что на билд сервере отсутствует каталог:

32-bit Windows
\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\
- 64-bit Windows
\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\

В нем должно присутствовать 5 файлов:

Microsoft.Web.Publishing.Tasks.Dll
Microsoft.Web.Publishing.targets
Microsoft.Web.Publishing.AllFilesInProjectFolder.targets
Microsoft.Web.Publishing.AllFilesInTheProject.targets
Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

Конечно можно один раз сложить файлы в данный каталог и не беспокоиться, но лишь до того времени когда интеграционная сборка проекта не будет перенесена на новый сервер. И как назло к этому времени нюанс с  Microsoft.Web.Publishing.targets останется только в голове уже уволившегося сотрудника, забывшего описать это в документации к проекту. Для того чтобы избежать этого нужно создать рядом с проектом каталог куда и скопировать вышеприведенные файлы. В моем примере я поместил файлы в каталог Resource. После этого открываем файл проекта MvcApplication1.csproj в любом текстовом редакторе. Я предпочитаю Notepad++.  И после 114 строки с добавить следующее:

  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" 
             Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets')" />
  <Import Project="..\Resource\Microsoft.Web.Publishing.targets" 
             Condition="!Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets')" />    

Архив с проектом со всеми модификациями можно скачать тут. После этого можно открыть проект в Visual Studio и проверить работоспособность пункта “Publish”.