MSBuild: MSB4036: The «TransformXml» task was not found

Автор: | 07/14/2016
 

msbuild_logoСборка .NET проекта останавливается с ошибкой:

10:42:42.010 (AfterBuild target) ->
10:42:42.010 C:\GO\pipelines\Platform\server\Platform_Soln\Platform.CMS\Platform.CMS.csproj(2584,5): error MSB4036: The «TransformXml» task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is «public» and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the «C:\Windows\Microsoft.NET\Framework64\v4.0.30319» directory.

Находим задачу TransformXml в csproj проекта:

...
   <Target Name="AfterBuild">
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" Condition="Exists('$(MSBuildExtensionsPath32)\Micronsoft\VisualStudio\v10.0\\Web\Microsoft.Web.Publishing.targets')"/>
    <TransformXml Source="config\umbracoSettings.config" Transform="config\umbracoSettings.$(Configuration).config" Destination="config\umbracoSettings.config" />
  </Target>
...

Для Windows 7 x64 переменная MSBuildExtensionsPath32 указывает на каталог \Program Files (x86)\MSBuild.

Следовательно, путь:

$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets

будет раскрываться как:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets

Ищем файл Microsoft.Web.Publishing.targets в каталоге C:\Program Files (x86):

> dir /A /S /P "C:\Program Files (x86)"\Microsoft.Web.Publishing.targets
 Volume in drive C has no label.
 Volume Serial Number is 8077-60D5

 Directory of C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web

18/01/2011  23:09           227,873 Microsoft.Web.Publishing.targets
               1 File(s)        227,873 bytes

 Directory of C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web

12/05/2015  20:11           275,016 Microsoft.Web.Publishing.targets
               1 File(s)        275,016 bytes

 Directory of C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web

25/06/2015  18:12           275,661 Microsoft.Web.Publishing.targets
               1 File(s)        275,661 bytes

     Total Files Listed:
               3 File(s)        778,550 bytes
               0 Dir(s)  16,385,974,272 bytes free

Первый результат поиска показывает, что target-файл на месте.

Проверяем AssemblyFile, который указан в target-файле для задачи TransformXml:

> type "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" | findstr /R "TransformXml"
  <UsingTask TaskName="TransformXml" AssemblyFile="Microsoft.Web.Publishing.Tasks.dll"/>

Проверяем его наличие в каталоге:

> dir "C:\Program Files (x86)"\MSBuild\Microsoft\VisualStudio\v10.0\Web
 Volume in drive C has no label.
 Volume Serial Number is 8077-60D5

 Directory of C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web

...
18/01/2011  23:09           227,873 Microsoft.Web.Publishing.targets
21/02/2011  17:04           337,272 Microsoft.Web.Publishing.Tasks.Dll

Всё верно, dll-файл на месте, но через импорт Microsoft.Web.Publishing.targets билд не работает.

Для решения — укажем AssemlyFile напрямую, добавив перед вызовом <Target Name="AfterBuild"> элемент <UsingTask />:

...
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
   <Target Name="AfterBuild">
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" Condition="Exists('$(MSBuildExtensionsPath32)\Micronsoft\VisualStudio\v10.0\\Web\Microsoft.Web.Publishing.targets')"/>
    <TransformXml Source="config\umbracoSettings.config" Transform="config\umbracoSettings.$(Configuration).config" Destination="config\umbracoSettings.config" />
  </Target>
...

И результат билда:

...
11:33:01.237 AfterBuild:
11:33:01.237   Transforming Source File: config\umbracoSettings.config
11:33:01.439     Applying Transform File: config\umbracoSettings.Debug.config
11:33:02.001     Output File: config\umbracoSettings.config
11:33:02.064   Transformation succeeded
11:33:02.064 Done Building Project "C:\GO\pipelines\Platform\server\Platform_Soln\Platform.CMS\Platform.CMS.csproj" (default targets).