web-dev-qa-db-fra.com

Le fichier * .dll.licenses du répertoire obj n'a pas été créé avec msbuild dans TeamCity

Je travaille sur la mise à niveau de nos projets TeamCity de VS2012 à VS2015 et je rencontre un problème de compilation de notre application MVC. 

Old MSBuild (v4.0.30319.34209) génère un fichier dans le répertoire obj appelé MyApplication.Web.Mvc.dll.licenses qui est apparemment requis pour la construction, mais nous ne savons pas à quoi sert réellement le fichier.

Le nouveau MSBuild (v14.0.23107.0) ne crée pas ce fichier MyApplication.Web.Mvc.dll.licenses; la construction échoue donc 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'exécutais les versions manuellement via cmd sur la machine et le fichier dll.licenses est créé à chaque exécution de la construction à l'aide de l'ancien msbuild, mais pas du 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 obsolète?

46
gwin003

Après un peu plus de recherches sur Google, je suis tombé sur ce fil sur MSDN .

La solution suggérée ici consiste à installer le SDK Windows 10 . Nous l'avons fait sur notre serveur de génération TeamCity exécutant Windows Server 2012 R2 en utilisant les options d'installation par défaut. Après un redémarrage, notre génération fonctionnait à nouveau.

J'espère que cela t'aides :)

38
Njål Nordmark

La réponse "Installer le Kit de développement logiciel (SDK) Windows 10" est correcte - en gros ... Un problème supplémentaire: il existe plusieurs versions de ce Kit de développement: une version existante: 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 SDK .NET Framework 4.6.2

Vérifiez votre sortie VS 2015 et quelle version de LC.exe est appelée. Ensuite, installez le SDK approprié sur le serveur de génération. N'oubliez pas d'installer Microsoft Build Tools 2015 également.

Remarque: Ma version cible .net 4.5, mais la procédure ci-dessus est nécessaire pour utiliser les outils de TeamCity with 2015.

10
Alois Maierhofer

Dans mon cas, TFS utilisait le compilateur de licences 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 construction Visual Studio pour remplacer votre étape msbuild 2015

8
Orlando

J'utilise Atlassian Bamboo en tant que serveur de construction, mais le problème est identique à celui décrit ici. J'ai essayé toutes les solutions de ce fil, mais rien ne fonctionnait. Finalement, j'ai utilisé la nouvelle version de MSBuild fournie avec Visual Studio 2017 et, tout à coup, ma DLL de licence a été créée correctement. Dans mon cas, le fichier MSBuild.exe peut être trouvé à l'adresse suivante: 

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

5
Tom

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 a résolu le problème dans mon cas.

1
user1613512

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, les paramètres de compilation, nous avons ajouté une "ligne de commande d'événement de pré-génération" 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 (les plus anciens), lance manuellement l'outil de compilation lc avant la génération du projet et compile le fichier licenses.licx dans le fichier de ressources * .licenses.

1
Josef Haslinger

C'est une situation étroitement liée mais légèrement différente en ce que j'utilise Jenkins pour contrôler la construction ...

J'ai dû faire plusieurs changements.

  1. Installé Windows 10 SDK sur le serveur de génération. Dans mon cas, l'installation du SDK "révélait" 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 paramètres de construction.

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

  1. Créé le fichier de licence manuellement en tant qu'étape préalable à 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\MonProject\workspace\MonProject\licences.licx"/i: "C:\Program Files\nsoftware\E-Payment Integrator V6 .NET Edition\lib\nsoftware.InPayWeb.dll "/ outdir:" C:\Fichiers de programme (x86)\Jenkins\jobs\MonProject\workspace\MonProject\obj\Release "

0