web-dev-qa-db-fra.com

La tâche "TransformXml" n'a pas été trouvée (erreur MSB4036) dans la version TeamCity

Bonjour, j'ai construit le serveur avec TeamCity. Mon projet est une application Web Sitecore. J'utilise TDS (HedgehogDevelopment). J'ai configuré les paramètres de construction dans TeamCity avec la version MS et il semble fonctionner lorsque le projet TDS est désactivé dans le gestionnaire de configuration de la version. Mais alors cela a permis d’obtenir une erreur nette

C:\Program Files (x86)\MSBuild\HedgehogDevelopment\SitecoreProject\v9.0\HedgehogDevelopment.SitecoreProject.targets (310, 5): erreur MSB4036: la tâche "TransformXml" n'a pas été trouvée. Vérifier la 1. Le nom de la tâche dans le fichier de projet est identique à celui de le nom de la classe de tâches. 2.) La classe de tâches est "publique" et implémente l'interface Microsoft.Build.Framework.ITask. 3.) La tâche est correctement déclaré avec dans le fichier de projet ou dans le fichier Fichiers * .tasks situés dans le répertoire "C:\Windows\Microsoft.NET\Framework64\v3.5". Projet NetKey.TDSMaster\MyProject.TDSMaster.scproj a échoué. Projet Website\MyProject.sln a échoué

L'aide dans la description de l'erreur n'est pas un cas pour moi. Je n'ai pas VS 2012 sur la machine de construction. J'ai installé Microsoft Visual Studio 2012 Shell pour le support de mon projet Web . Comment le résoudre? Merci. 

24
Arbejdsglæde

TransformXML fait partie des outils de publication Web ASP.NET. En tant que tels, ils viennent généralement avec une installation de Visual Studio sur votre serveur de génération et nécessitent plus que la version Shell de Visual Studio. L'installation de Visual Studio Express Web Edition peut également faire l'affaire.

Vous pouvez essayer d'installer le paquet Web-Deploy pour voir si c'est suffisant, mais d'habitude, j'installe simplement la version complète de Visual Studio sur un agent de construction. Ceci est légal sous licence MSDN Subscription.

Après quelques expériences, je peux dire que vous devez au moins installer les outils de développement Visual Studio Web sur le serveur de génération pour que ces tâches soient installées de manière officielle. Je soupçonne que l’installation de Visual Studio Express Web Edition suffirait.

enter image description here

21
jessehouwing

Essaye ça:

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

Réponse courte - Importer explicitement

Ce que je devais faire:

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

Longue réponse

Lorsque vous faites Fichier -> Nouveau projet Web dans VS2013, vous obtenez les éléments suivants dans votre fichier * .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)' != ''" />

La $(VisualStudioVersion) a toujours été évaluée avec 11.0 pour moi sur les machines de construction et sur plusieurs machines de développement. Même sur les machines avec VS2013, qui est 12.0.

En plongeant dans cela, j'ai trouvé que dans le Microsoft.WebApplication.targets d'en haut, il y a une ligne pour importer le fichier que nous voulons vraiment Microsoft.Web.Publishing.targets uniquement s'il existe comme cela à la ligne 377:

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

Donc, pour moi, il s’agit d’un implicite import de Microsoft.Web.Publishing.targets.

Le problème est que si ce fichier n'existe pas, il ne fait rien et vous ne le savez pas jusqu'à ce que vous obteniez l'erreur lorsque vous essayez d'utiliser la tâche TransformXml

L'installation de VS2013 n'a pas installé Microsoft.Web.Publishing.targets dans le répertoire 11.0. Il l'a installé dans le répertoire 12.0. Je suppose que si j'ai installé VS2012, il le ferait.

Dans tous les cas, j’ai pu résoudre ce problème par explicitement importing Microsoft.Web.Publishing.targets à partir du répertoire 12.0 s’il n’existait pas et n’était pas implicitement importé par Microsoft.WebApplication.targets comme suit:

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

Dans Visual Studio 2017, par défaut, la plupart (ou tous?) Des composants ne sont pas installés, mais vous pouvez ajouter ce qui est requis (par exemple, Asp.Net et développement Web), comme décrit dans https://docs.Microsoft.com/en-us./visualstudio/install/modify-visual-studio .

Sur mon ordinateur, le programme d'installation se trouve dans "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe".

1
Michael Freidgeim

J'ai eu le même problème après avoir rétrogradé les outils TypeScript de 2.4.10 à 2.3.3 dans VS2015.

Solution :

Je le supprime du fichier 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>
0
imfloflo