webentwicklung-frage-antwort-db.com.de

Nuget kann Microsoft.Net.Compilers.1.0.0 nicht wiederherstellen

Ich versuche, Microsoft.Net.Compilers.1.0.0 in VS 2017 mit Nuget Package Manager zu installieren/wiederherzustellen. In der Ausgabe wird angezeigt, dass die Wiederherstellung abgeschlossen ist. Wenn ich jedoch den packages-Ordner überprüfe, sehe ich keine Microsoft.Net.Compilers-Ordner . Und wegen dessen bekomme ich eine Fehlermeldung

Schweregradcode Beschreibung Status der Unterdrückung der Projektdateizeile Fehler Dieses Projekt verweist auf NuGet-Pakete, die auf .__ fehlen. dieser Computer. Laden Sie sie mit NuGet Package Restore herunter. Für mehr Informationen finden Sie unter http://go.Microsoft.com/fwlink/?LinkID=322105 . Das fehlende Datei ist ....\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props. XXXXX\Src\Api\Api.csproj 296

In der Datei csproj befindet sich oben eine Zeile

<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')" />

Hintergrund
Dieses Problem tritt bei einem Web-API-Projekt mit dem Zielframework 4.6.2 auf. Ich habe auch eine NET Standard 1.4-Bibliothek, die ich mit verschiedenen Arten von .NET-Anwendungen teilen möchte. Wenn ich dem Web-API-Projekt einen Verweis auf NET Standard Library hinzufüge, erhielt ich fehlende Abhängigkeiten . Entsprechend dem Vorschlag habe ich die .csproj-Datei bearbeitet und hinzugefügt 

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

Das Problem der fehlenden Abhängigkeiten wurde behoben. 

Dann löschte ich die package.config-Datei, entfernte alle Pakete aus dem packages-Ordner und fügte alle Pakete zurück (außer ich konnte keine Microsoft.Net.Compilers hinzufügen). Die Paketreferenz befindet sich jetzt in der .csproj-Datei

Es SO Beitrag hier, aber in meinem Fall Microsoft.Net.Compilers noch nicht gestellt zu werden Ordner packages. VS 2017 zeigt, dass die Wiederherstellung abgeschlossen ist, aber ich weiß nicht, wo die Dateien tatsächlich kopiert werden. (es sei denn, der Ordnername unterscheidet sich von Microsoft.Net.Compilers)

Meine ursprüngliche package.config-Datei enthält diese Zeile

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

jetzt in .csproj datei habe ich 

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

UPDATE 1
Es sieht also so aus, als würde PacketReferenz aktiviert, wenn nuget die Pakete im C:\Users\{username}\.nuget\packages Ordner installiert 

das bedeutet, ich muss die Csproj-Datei mit dem richtigen relativen Pfad aktualisieren.

Wie lautet der relative Pfad für den Paketordner?

5
LP13

Nachdem Sie das Package Management-Format auf PackageReference festgelegt haben, werden die Pakete im globalen Nuger-Ordner (C:\Users\{username}\.nuget\packages) installiert. Daher musste ich die folgenden Zeilen mit der Csproj-Datei aktualisieren

Spitze von 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')" />

und dann aktualisieren Sie die folgenden Zeilen am unteren Rand von 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>

All dies dient lediglich zur Referenzierung des NET Standard 1.4-Projekts in .NET 4.6.2. sehr nervig!!

5
LP13

@ LP13s Antwort brachte mich in die richtige Richtung. Obwohl ich etwas anderes machen musste.

Meine .csproj-Datei hat 2 Verweise auf Microsoft.Net.Compliers. Eine für 2.9.0 (aktuelle Version, die ich verwende) und 1.2.1 (alte Version).

Am Anfang der Datei habe ich die beiden Zeilen des Importprojekts, auf die verwiesen wird, auskommentiert:

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

  • Importieren Sie Project = ".\Packages\Microsoft.Net.Compilers.1.2.1 ...

Führen Sie am Ende der Datei dasselbe in den Fehlerbedingungs-Einträgen für die gleichen Reaktionen aus:

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

In meinem Fall hatte ich ein Projekt von GitHub heruntergeladen, das nicht die vollständige SLN enthielt, sondern nur einen einzigen Ordner mit dem Ordner .csproj und Packages auf derselben Ebene hatte.

In diesem Fall musste ich einfach "..\packages \" durch ".\Packages \" in der .csproj-Datei ersetzen. Ich nehme an, der Besitzer des GitHub-Repos hat sich entschieden, nur den Projektordner hochzuladen, wurde aber vor dem Hochladen nicht zum Testen neu kompiliert ... vielleicht?

0
Dirk Wessels