Подтвердить что ты не робот

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

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

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 для поддержки моего веб-проекта. Как его решить? Благодарю.

4b9b3361

Ответ 1

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

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

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

enter image description here

Ответ 2

Попробуйте следующее:

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

Ответ 3

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

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

<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)' != ''" />

$(VisualStudioVersion) всегда оценивается как 11.0 для меня на машинах сборки и на нескольких машинах разработки. Даже на машинах с VS2013, который 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')" />

Ответ 4

В 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"

Ответ 5

У меня была такая же проблема после переопределения инструментов 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>

Ответ 6

Если у вас есть много версий 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>