web-dev-qa-db-fra.com

Nuget ne peut pas restaurer Microsoft.Net.Compilers.1.0.0

J'essaie d'installer/restrore Microsoft.Net.Compilers.1.0.0 dans VS 2017 à l'aide de Nuget Package Manager. Dans la sortie, il indique que la restauration est terminée. Cependant, lorsque je vérifie le dossier packages, je ne vois pas les dossiers Microsoft.Net.Compilers . Et, à cause de cela, j'obtiens une erreur.

Code de gravité Description État de suppression de ligne de fichier de projet Error Ce projet référence les packages NuGet manquants sur cet ordinateur. Utilisez NuGet Package Restore pour les télécharger. Pour plus informations, voir http://go.Microsoft.com/fwlink/?LinkID=322105 . Le le fichier manquant est ....\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props. XXXXX\Src\Api\Api.csproj 296

Dans le fichier csproj il y a une ligne en haut

<Import Project="..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />

Contexte
Ce problème se produit dans un projet d'API Web avec l'infrastructure cible 4.6.2. J'ai aussi la bibliothèque NET Standard 1.4 que je veux partager avec différents types d’applications .NET. Quand j’ajoute la référence de NET Standard Library au projet d’API Web, j’ai eu problèmes de dépendances manquantes . Donc, selon la suggestion, j'ai édité le fichier .csproj et ajouté 

  <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

Cela a résolu le problème des dépendances manquantes. 

Ensuite, j'ai supprimé le fichier package.config, supprimé tous les packages du dossier packages et rajouté tous les packages (sauf que je n'ai pas pu ajouter Microsoft.Net.Compilers). La référence du paquet est maintenant dans le fichier .csproj

DONC post ici, cependant, dans mon cas, Microsoft.Net.Compilers n'est même pas restauré dans le dossier packages. Les spectacles VS 2017 restaurés sont terminés, mais je ne sais pas où ils copient réellement les fichiers. (sauf si le nom du dossier est différent de Microsoft.Net.Compilers)

Mon fichier original package.config a cette ligne

<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net462" developmentDependency="true" />

maintenant dans le fichier .csproj j'ai 

   <PackageReference Include="Microsoft.Net.Compilers">
      <Version>1.0.0</Version>
    </PackageReference>

UPDATE 1
Donc, il semble que lorsque packagereference est activé, Nuget installera les paquets dans le dossier C:\Users\{username}\.nuget\packages 

cela signifie que je dois mettre à jour le fichier csproj avec le chemin relatif correct.

Quel serait le chemin relatif ici pour le dossier des packages?

5
LP13

Depuis que définir le format de gestion des packages sur PackageReference installe les packages dans un dossier nuger global qui est C:\Users\{username}\.nuget\packages, je devais modifier le fichier csproj

haut de csproj

<Import Project="$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props')" />

puis mettez à jour les lignes suivantes au bas de csproj

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.Microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '$(UserProfile)\.nuget\packages\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
  </Target>

Tout cela consiste simplement à référencer le projet NET Standard 1.4 dans .NET 4.6.2. très ennuyant!!

5
LP13

La réponse de @ LP13 m'a orienté dans la bonne direction. Bien que je devais faire quelque chose de différent.

Mon fichier .csproj contient 2 références à Microsoft.Net.Compliers. Un pour 2.9.0 (celui que j'utilise actuellement) et 1.2.1 (ancienne version).

En haut du fichier, j'ai commenté les deux lignes du projet d'importation qui faisaient référence à:

  • Import Project = ".\Packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1 ...

  • Import Project = ".\Packages\Microsoft.Net.Compilers.1.2.1 ...

Au bas du fichier, procédez de la même manière dans les entrées de condition d'erreur pour les mêmes références:

  • Erreur Condition = "! Exists ('.\Packages\Microsoft.Net.Compilers.1.2.1 ...
  • Erreur Condition = "! Exists ('.\Packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1' ...
1
Jeff Blumenthal

Dans mon cas, j'avais téléchargé un projet de GitHub qui n'incluait pas le nom de fichier complet, mais un simple dossier contenant .csproj et le dossier packages au même niveau.

Dans ce cas, je devais simplement remplacer "..\packages \" par ".\Packages \" dans le fichier .csproj. Je suppose que le propriétaire du référentiel GitHub a décidé de ne télécharger que le dossier du projet, mais n'a pas recompilé pour tester avant de télécharger ... peut-être?

0
Dirk Wessels