web-dev-qa-db-fra.com

La compilation de Team Foundation Service échoue lors de la restauration du package NuGet

Je rencontre un problème étrange avec ma version Team Foundation Service. Je l'ai mis en file d'attente et tout commence bien, mais cela a échoué avec l'erreur suivante:

C:\a\src\Platform\Prod\Platform.Web\Platform.Web.csproj (436): The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.Microsoft.com/fwlink/?LinkID=317568.

Alors je re-file la construction par le message/URL et ... ça se reproduit. J'ai cherché sur Google, mais je n'arrive pas à comprendre le problème. Je peux très bien construire dans Visual Studio et la solution est configurée pour la restauration de packages. Des pensées?

Merci d'avance.

31
benjy

La solution à cela est spécifiée dans link dans le message d'erreur lui-même.

Ceci est dû à une amélioration telle que spécifiée dans cette page:

L'amélioration

Nous avons mis à jour Microsoft.Bcl.Build pour utiliser une approche différente. Le nouveau La version utilisera une importation conditionnelle similaire à celle de fonctionnalité d'importation automatique fait. Cela permettra toujours au projet de charger dans Visual Studio.

Toutefois, Microsoft.Bcl.Build ajoute également à votre projet une cible qui s'exécutera une fois la construction terminée. Cette cible vérifie si le construction actuelle restaurée paquets et si ainsi échouer la construction avec un message d'erreur pouvant donner lieu à une action:

Construire une seconde fois corrigera cette erreur. S'il vous plaît noter que cela error n'apparaîtra que si des paquetages étaient manquants, alors ce n'est pas comme vous toujours avoir à construire deux fois.

Ensuite, il spécifie comme suit pour le cas de construction de serveur/intégration continue (CI):

Cette solution ne traite pas de l'intégration de serveur de construction/continu Scénarios (CI). Afin d'utiliser avec succès la restauration de package sur le fichier construire un serveur, vous avez deux options:

  1. Enregistrez le fichier .targets.
  2. Exécuter explicitement la restauration du package NuGet avant de générer votre projet/solution.

Donc, je suppose que pour votre résolution de problème, les deux étapes ci-dessus doivent être suivies.

15
RinoTom

Si quelqu'un a toujours ce problème sur le serveur de compilation tfs, vous devez procéder comme suit:

  1. Assurez-vous que tous les projets de la solution que vous essayez de générer possèdent le dernier package Microsoft.Bcl.Build (il suffit de le mettre à jour dans le gestionnaire de packages).
  2. Après la construction a échoué, voir tous les projets (dans le résumé du journal de construction de tfs) qui génèrent cette erreur ("La compilation a restauré les paquets NuGet ...").
  3. Ouvrez chacun des fichiers .proj de ce projet et commentez l'élément cible entier commençant par 'Target Name = "EnsureBclBuildImported"'
  4. Archiver et réessayer la construction

Il semble en quelque sorte qu'après la mise à niveau, tous les projets ne retirent pas l'ancien bloc de code de génération et cela cause des problèmes (si j'ai bien compris, il n'est plus nécessaire après que Microsoft ait modifié son processus de génération par bcl).

47
Michael Logutov

J'ai rencontré ce problème sur un projet API Web, mais nous utilisons NAnt.

La solution a été de mettre à jour le package de nuget Microsoft BCL Build Components vers la dernière version (1.0.21) et tout se passe bien maintenant.

0
GotDibbs

Je viens d'avoir le même problème avec TeamCity plutôt que TFS. 

Nous restaurons explicitement les packages avant la construction, mais certains projets ont encore des erreurs sur le serveur CI. 

Nous avons réussi à le résoudre sans pirater les fichiers csproj. 

Nous avons forcé la propriété de construction BclBuildImported = True après la restauration des packages. Les cibles non autorisées dans les fichiers csproj sont conditionnelles à ce que cette propriété ne soit pas définie.

Cela peut constituer un moyen plus robuste de l’utiliser si vous pouvez définir cette propriété facilement dans TFS. 

0
lesscode

J'ai vu le même problème dans un projet Xamarin et les étapes suivantes ont résolu mon problème.

  1. Définir le mode de projet sur Libérer et reconstruire tout
  2. Remettre le mode projet sur Debug et Rebuild All
  3. Problème trié.

Bizarre mais a fonctionné pour moi, j'espère que ça aidera.

0
Nurhak Kaya

Les fichiers de cibles TFSBuild requis doivent être inclus dans le contrôle de source ou les packages NuGet doivent être restaurés avant de tenter de générer la solution.

Des détails sur la manière de procéder sont fournis sur le site nuget.org .

Il s’agit essentiellement de créer un nouveau fichier de projet de construction qui restaure d’abord les packages, puis construit votre solution.

0
Scott Munro

Je devais restaurer des paquets avant la cible propre de mon script de génération. J'ai pensé à tort que la restauration des paquets avant la construction était suffisante.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets='GatherBinaries' xmlns='http://schemas.Microsoft.com/developer/msbuild/2003'>

    <Target Name='RestorePackages'>
        <Exec Command='tools\NuGet.exe Restore "Web.sln"'/>
    </Target>

    <!--
        must call RestorePackages prior to clean to avoid error the following error
        "The build restored NuGet packages. Build the project again to include these packages in the build."
        -->
    <Target Name='Clean' DependsOnTargets='RestorePackages'>
        <MSBuild Projects='Web.sln' Targets='Clean' Properties='Configuration=Release'/>
    </Target>

    <Target Name='Build' DependsOnTargets='Clean;RestorePackages'>
        <MSBuild Projects='Web.sln' Targets='Build' Properties='Configuration=Release'/>
    </Target>

</Project>
0
mcdon

Ouvrez le csproj incriminé dans le bloc-notes ou tout autre éditeur . Vérifiez si la cible EnsureBclBuildImported est disponible dans csproj. Si tel est le cas, commentez la deuxième condition d'erreur à l'intérieur de la cible qui ordonne l'échec de la construction, même si le package est disponible (son échec est similaire à la construction, que le package soit disponible ou non!).

<Target Name = "EnsureBclBuildImported" BeforeTargets = "BeforeBuild" Condition = "'$ (BclBuildImported)' '==' '"> 

<Error Condition = "! Exists ('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text = "Ce projet fait référence aux packages NuGet manquants sur cet ordinateur. Activez la restauration du package NuGet pour les télécharger. Pour plus d'informations, consultez http://go.Microsoft.com/fwlink /? LinkID = 317567 . " HelpKeyword = "BCLBUILD2001" /> 

<Error Condition = "Exists ('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text = "La compilation des packages NuGet restaurés. Générez à nouveau le projet pour Inclure ces packages dans la construction. Pour plus d'informations, voir http://go.Microsoft.com/fwlink/?LinkID=317568 . " HelpKeyword = "BCLBUILD2002" /> 
</ Target> 

0
Saurabh Jha