Задача TransformXml не найдена (ошибка MSB4036) в сборке TeamCity

Здравствуйте, у меня есть сервер сборки с TeamCity. Мой проект - это веб-приложение Sitecore. Я использую TDS (HedgehogDevelopment). У меня есть настройки сборки в TeamCity с помощью сборки MS, и похоже, что она работает, когда проект TDS отключен в диспетчере конфигурации сборки. Но затем он активизировался, я получаю чистую ошибку

C: \ Program Files (x86) \ MSBuild \ HedgehogDevelopment \ SitecoreProject \ v9.0 \ HedgehogDevelopment.SitecoreProject.targets (310, 5): ошибка MSB4036: задача «TransformXml» не найдена. Проверьте следующее: 1.) Имя задачи в файле проекта совпадает с именем класса задачи. 2.) Класс задачи является «общедоступным» и реализует интерфейс Microsoft.Build.Framework.ITask. 3.) Задача правильно объявлена ​​в файле проекта или в файлах * .tasks, расположенных в каталоге «C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5». Ошибка проекта NetKey.TDSMaster \ MyProject.TDSMaster.scproj. Веб-сайт проекта \ MyProject.sln не удалось

Помощь в описании ошибки мне не подходит. У меня нет VS 2012 на машине сборки. Я установил оболочку Microsoft Visual Studio 2012 Shell для поддержки своего веб-проекта. Как это решить? Спасибо.


person Arbejdsglæde    schedule 20.05.2013    source источник


Ответы (8)


TransformXML входит в состав инструментов веб-публикации ASP.NET. Как таковые, они обычно поставляются с установкой Visual Studio на вашем сервере сборки и требуют большего, чем просто версию Visual Studio для оболочки. Установка Visual Studio Express Web Edition также может помочь.

Вы можете попробовать установить Web-Deploy package, чтобы проверить, достаточно ли этого, но обычно я просто установить полную версию Visual Studio на агент сборки. Это законно при лицензировании подписки MSDN.

После некоторых экспериментов я могу сказать, что вам необходимо установить хотя бы Visual Studio Web Developer Tools на сервере сборки, чтобы эти задачи были установлены официальным способом. Я подозреваю, что достаточно установить Visual Studio Express Web Edition.

введите описание изображения здесь

person jessehouwing    schedule 20.05.2013
comment
Я установил этот и многие другие инструменты из установщика веб-платформы 4.5, но он не работает. - person Arbejdsglæde; 20.05.2013
comment
По умолчанию сюда добавляется задача TransformXML: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v{VisualStudioVersion}\Web\Microsoft.Web.Publishing.targets. Правильная установка Visual Studio (имеется в виду Visual Studio Pro или выше) должна решить проблему. Или вы можете попытаться скопировать / вставить папку msbuild с компьютера, на котором установлена ​​Visual Studio, что может работать, если задачи не зависят от какой-либо другой библиотеки, поставляемой с Visual Studio. - person jessehouwing; 20.05.2013
comment
Подтверждено, что копирование всей папки C: \ Program Files (x86) \ MSBuild на сервер сборки TeamCity позволит запустить задачу TransformXML. Я попытался скопировать только те файлы, которые казались относящимися к задаче TransformXML, но все равно получал ошибку (пока я не скопировал всю папку MSBuild) - person Noah Heldman; 23.10.2013
comment
Подтверждено, что установка VS2013 не решает проблему. - person Rick Glos; 26.11.2014
comment
Подтверждено, что копирование всей папки C: \ Program Files (x86) \ MSBuild на сервер сборки позволит запустить задачу TransformXML. На моем компьютере разработчика было установлено обновление 2 для Visual Studio 2013 с обновлением 4, исправленным в и MS Web Developer Tools. Принимая во внимание, что на моем компьютере сборки был VS 2013 Update3 с обновлением 4, исправленным в без установленных MS Web Developer Tools. Итак, копирование папки MSBuild с моей машины разработки на машину сборки сработало и, возможно, скопировало дополнительные файлы, которые присутствовали на моей машине разработки из-за установки MS Web Developer Tools. - person EnocNRoll - AnandaGopal Pardue; 05.03.2015

Попробуй это:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
person Choquequirao    schedule 13.03.2014

Краткий ответ - явно импорт

Что мне нужно было сделать:

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

Длинный ответ

Когда вы выполняете File -> New Web Project в VS2013, вы получаете в своем файле * .csproj следующее:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

The $(VisualStudioVersion) always evaluated to 11.0 for me on build machines and on multiple development machines. Even on machines with VS2013, which is 12.0.

Погрузившись в это, я обнаружил, что в Microsoft.WebApplication.targets сверху есть строка для импорта файла, который нам действительно нужен Microsoft.Web.Publishing.targets, только если он существует так, как в строке 377:

<!--Import publishing target-->
<Import Project="..\Web\Microsoft.Web.Publishing.targets" Condition="Exists('..\Web\Microsoft.Web.Publishing.targets')" />

Для меня это неявный импорт Microsoft.Web.Publishing.targets.

Проблема в том, что если этот файл не существует, он ничего не делает, и вы не узнаете о нем, пока не получите сообщение об ошибке при попытке использовать задачу TransformXml.

Установка VS2013 не привела к установке Microsoft.Web.Publishing.targets в каталог 11.0. Он установил его в каталог 12.0. Я предполагаю, что если бы я установил VS2012, он сделал бы это.

В любом случае я смог решить эту проблему, явно импортировав Microsoft.Web.Publishing.targets из каталога 12.0, если он не существует и не был неявно импортирован Microsoft.WebApplication.targets следующим образом:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />
person Rick Glos    schedule 26.11.2014
comment
Что интересно, раньше мне не приходилось использовать задачу XMLTransform, она выполняла это автоматически. И вот однажды это просто прекратилось. Есть идеи, почему? - person CamHart; 15.02.2016

У вас много версий Visual Studio, попробуйте это

VS2015

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

VS 2017

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

VS 2019

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

<Target Name="TransformConfig">
    <MakeDir Directories="$(TargetDir)" Condition="  Exists('$(TargetPath)') == False " />
    <TransformXml Source="app.config"
        Transform="app.$(Configuration).config"
        Destination="$(TargetPath).config" />
</Target>

person Kim Ki Won    schedule 30.09.2019

В Visual Studio 2017 по умолчанию большинство (или все?) Компонентов не установлены, но вы можете добавить то, что требуется (например, Asp.Net и веб-разработка), как описано в https://docs.microsoft.com/en-us/visualstudio/install/modify-visual-studio.

На моем компьютере установщик находится в папке «C: \ Program Files (x86) \ Microsoft Visual Studio \ Installer \ vs_installer.exe».

person Michael Freidgeim    schedule 13.03.2017
comment
У меня выбраны ASP.NET и веб-разработка, но у меня нет папки C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ Web. Что мне не хватает? - person Fabrice; 13.03.2017
comment
Я нашел следующий NuGet, который выполняет эту работу: github.com/pdonald/nuget-webtargets - person Fabrice; 13.03.2017
comment
@Fabrice, v14.0 для Visual Studio 2015, компоненты 2017 находятся где-то еще (вероятно, в папке v15.0) - person Michael Freidgeim; 14.03.2017
comment
Их нет в папке v15.0. Кажется, что должны быть установлены другие компоненты, кроме ASP.NET и веб-разработки. как ни странно, согласно Visual Studio, они связаны с разработкой для Windows. - person Fabrice; 14.03.2017
comment
@MichaelFreidgeim Мне удалось решить эту проблему после установки того, что казалось всем. Решение было следующим: 1. Установите VS 2017 (для меня сообщество) на сервер сборки 2. Установите инструменты сборки VS 2017 3. Измените инструменты сборки и выберите инструменты сборки веб-разработки. - person FryHard; 27.03.2017

Представленные решения, похоже, подходят для использования VS в качестве IDE, но если вы используете DotnetCore через CLI или в системе на основе unix, это не сработает.

Я обнаружил, что, похоже, работают следующие

  <PropertyGroup>
    <XmlTransformDllPath Condition="'$(XmlTransformDllPath)' == '' AND '$(MSBuildRuntimeType)' == 'core'">$(MSBuildSDKsPath)/Microsoft.NET.Sdk.Publish/tools/net5.0/Microsoft.NET.Sdk.Publish.Tasks.dll</XmlTransformDllPath>
    <XmlTransformDllPath Condition="'$(XmlTransformDllPath)' == '' AND '$(MSBuildRuntimeType)' != 'core'">$(MSBuildSDKsPath)/Microsoft.NET.Sdk.Publish/tools/net472/Microsoft.NET.Sdk.Publish.Tasks.dll</XmlTransformDllPath>
    <XmlTransformDllPath Condition="!Exists($(XmlTransformDllPath))">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll</XmlTransformDllPath>
  </PropertyGroup>
  <UsingTask TaskName="TransformXml" AssemblyFile="$(XmlTransformDllPath)" />

Это решение учитывает netcore, полный .net

По какой-то причине MSBuildSDKsPath и MSBuildExtensionsPath32 отличаются в окнах при использовании CLI и VS2019

Интерфейс командной строки: MSBuildSDKsPath = C:\Program Files\dotnet\sdk\5.0.103\Sdks MSBuildExtensionsPath32 = C:\Program Files\dotnet\sdk\5.0.103

Vs2019 MSBuildSDKsPath = C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Sdks MSBuildExtensionsPath32 = C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild

Что на моем Mac возвращает /usr/local/share/dotnet/sdk/5.0.201

Единственная проблема, которую я вижу, - это tools/net5.0 часть имени, которая меняется при выпуске

person Max Hamulyák    schedule 22.03.2021
comment
Открыл github.com/dotnet/sdk/issues/16469 мои комментарии о TFM. - person Max Hamulyák; 22.03.2021

У меня была такая же проблема после понижения версии инструментов TypeScript с 2.4.10 до 2.3.3 в VS2015.

Решение:

Я удаляю это из файла Microsoft.TypeScript.targets

    <FormatLocalizedString Condition="'$(TypeScriptVersionCheckResult)' == 'NoneSpecified'"
  Culture="$(PreferredUILang)" 
  Name="TypeScriptNoVersionWarning" 
  Arguments="$(LastKnownTypeScriptVersion)">
  <Output TaskParameter="String" PropertyName="TypeScriptNoVersionWarning" />
</FormatLocalizedString>

<FormatLocalizedString Condition="'$(TypeScriptVersionCheckResult)' == 'Downgrade' OR '$(TypeScriptVersionCheckResult)' == 'Upgrade'"
  Culture="$(PreferredUILang)" 
  Name="TypeScriptVersionMismatchWarning" 
  Arguments="$(TypeScriptToolsVersion);$(LastKnownTypeScriptVersion)">
  <Output TaskParameter="String" PropertyName="TypeScriptVersionMismatchWarning" />
</FormatLocalizedString>
person imfloflo    schedule 12.07.2017

Просто возникла эта проблема при попытке собрать мой проект с использованием msbuild в командной строке. Команда довольно большая, и я не заметил, что аргумент /p:VisualStudioVersion="14.0" был неправильным, что привело к неправильному пути к Microsoft.Web.Publishing.targets. Поскольку я использую Visual Studio 2019, ее нужно было /p:VisualStudioVersion="16.0" или просто удалить.

Для тех, у кого такая же проблема, дважды проверьте параметры msbuild и проверьте, зависит ли какое-либо свойство .csproj от вашей версии Visual Studio.

Я знал, что C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.targets следует импортировать, но в моем .csproj

<Import Project="$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />

и все равно TransformXml не был найден. Я пробовал вести журнал VsToolsPath с помощью

<Project InitialTargets="CopyInitialConfig">
    ...
    <Target Name="MyTarget">
        <Message Importance="High" Text="VS Tools is at $(VSToolsPath)" />
    </Target>
    ...

Которые при сборке вошли

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets
person Ante Novokmet    schedule 21.09.2020