* Fichier .dll.licenses dans le répertoire obj non créé avec msbuild dans TeamCity

Je travaille sur la mise à niveau de nos projets TeamCity de VS2012 à VS2015 et je suis en train de résoudre un problème en compilant notre application MVC.

L’ancien MSBuild (v4.0.30319.34209) génère un fichier dans le répertoire obj appelé MyApplication.Web.Mvc.dll.licenses qui est apparemment requirejs pour la construction, mais nous n’avons aucune idée de l’utilisation réelle du fichier.

New MSBuild (v14.0.23107.0) ne crée pas ce fichier MyApplication.Web.Mvc.dll.licenses , la construction échoue avec l’erreur suivante:

 CSC error CS1566: Error reading resource 'MyApplication.Web.Mvc.dll.licenses' -- 'Could not find file 'C:\BuildAgent\work\58ddf5f1234d8c8a\application\MyApplication\MyApplication.Web.Mvc\obj\Release\MyApplication.Web.Mvc.dll.licenses'.' 

J’ai exécuté les builds manuellement via cmd sur la machine, et le fichier dll.licenses est créé à chaque fois que la compilation est exécutée en utilisant l’ancien msbuild, mais pas le nouveau.

Le fichier est créé sur les machines de développement exécutant VS2015, mais pas sur le serveur de génération Teamcity. Donc, il me semble que quelque chose d’autre est dépassé?

Après un peu plus de googler, je suis tombé sur ce sujet sur MSDN .

La solution proposée ici consiste à installer le SDK Windows 10 . Nous l’avons fait sur notre serveur de construction TeamCity exécutant Windows Server 2012 R2 en utilisant les options d’installation par défaut, et après un redémarrage, notre build fonctionnait à nouveau.

J’espère que cela t’aides 🙂

La réponse “Installer le SDK Windows 10” est correcte – essentiellement. Mais il y a un piège supplémentaire: il existe plus d’une version de ce SDK: https://developer.microsoft.com/en-us/windows/downloads/sdk-archive

Par l’écriture de ce commentaire:

  • Juillet 2015 (version 10.0.26624.0) contient le SDK .NET Framework 4.6
  • Nov. 2015 (Version 10.0.10586.212) contient le SDK .NET Framework 4.6.1
  • Août 2016 (Version 10.0.14393.0) contient le Kit de développement logiciel (SDK) .NET Framework 4.6.2

Vérifiez votre sortie VS 2015 et la version de LC.exe appelée. Installez ensuite le SDK approprié sur le serveur de génération. N’oubliez pas d’installer Microsoft Build Tools 2015 également.

Note: Ma construction cible .net 4.5, mais ci-dessus est nécessaire pour développer TeamCity avec les outils 2015.

Dans mon cas, TFS utilisait le compilateur de licence lc.exe de l’ancien dossier SDK

 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\lc.exe 

au lieu de

 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\LC.exe 

Ce problème a été résolu en ajoutant l’argument msbuild suivant à la définition de construction:

 /p:FrameworkOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2" 

Vous pouvez également vous débarrasser de ces problèmes et vous simplifier la vie en installant Visual Studio sur le serveur de génération et en ajoutant une étape de création de studio visuel pour remplacer votre étape de construction de ms 2015

J’utilise Atlassian Bamboo comme serveur de compilation, mais le même problème est décrit ici. J’ai essayé chaque solution dans ce fil mais je n’ai rien pu faire fonctionner. Au final, j’ai utilisé la nouvelle version de MSBuild fournie avec Visual Studio 2017 et tout à coup ma licence dll a été créée correctement. Dans mon cas, le fichier MSBuild.exe se trouve à l’adresse suivante:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ MSBuild.exe

Pourrait être utile pour quelqu’un:

Après avoir installé le SDK Windows 10 et redémarré mon serveur, j’ai ajouté /p:VisualStudioVersion=14.0 /p:TargetFrameworkVersion=v4.5.2 à mon msbuild.exe. Cela l’a résolu dans mon cas.

Nous avons eu le même problème lors de la construction avec VisualBuild. J’ai trouvé une solution sans installer le SDK Win10:

Dans les propriétés du projet Comstack Settings, nous avons ajouté une “ligne de commande d’événement de pré-build” comme ceci:

 pushd "%VS120COMNTOOLS%..\..\VC" call vcvarsall.bat popd pushd $(ProjectDir)\"My Project" lc /target:$(TargetFileName) /complist:licenses.licx /outdir:"..\obj\$(ConfigurationName)" popd popd 

Cette commande utilise les outils VS12 (plus anciens) et lance manuellement l’outil de compilation lc avant la génération du projet et comstack le fichier licenses.licx dans le fichier de ressource * .licenses.

Ceci est une situation étroitement liée mais légèrement différente en ce sens que j’utilise Jenkins pour contrôler la construction …

J’ai dû faire plusieurs changements.

  1. Windows 10 SDK installé sur le serveur de génération. Dans mon cas, l’installation du SDK “a révélé” l’erreur sous-jacente, à savoir que MSBuild ne générait pas le fichier * .dll.licenses.
  2. Ajout de /tv:14.0 (/ToolsVersion:14.0) à mes parameters de construction.

/ p: Configuration = Release /p:VisualStudioVersion=14.0 /tv:14.0 / verbosity: Normal

  1. Création manuelle du fichier de licence en une étape avant l’exécution de l’étape MSBuild. La commande suivante crée le fichier “myproject.dll.licenses”.

cd “Outils C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v10.0A \ bin \ NETFX 4.6.2”

. \ lc.exe /target:MyProject.dll / complist: “C: \ Program Files (x86) \ Jenkins \ jobs \ MyProject \ espace de travail \ MyProject \ licenses.licx” / i: “C: \ Program Files \ nsoftware \ E-Payment Integrator V6 .NET Edition \ lib \ nsoftware.InPayWeb.dll “/ outdir:” C: \ Program Files (x86) \ Jenkins \ jobs \ MonProject \ workspace \ MyProject \ obj \ Release ”