Was ist project.lock.json?

72

Ich habe die Anweisung zum Erstellen eines neuen .NET Core-Projekts befolgt und dieses von cmd ausgeführt:

dotnet new
dotnet restore

Die zweite Anweisung erstellt project.lock.json, die viel Müll enthält (nicht wirklich Müll, sondern Tonnen von Abhängigkeiten, Konfigurationen usw.). Ich gehe davon aus, dass es sich bei diesen Abhängigkeiten um .NET Framework handelt, das in separate NuGet-Pakete unterteilt ist.

Meine Fragen:

  1. Ist meine Annahme richtig?
  2. Kann ich meine Anwendung leichter machen, indem ich nicht benötigte NuGet-Pakete / Abhängigkeiten entferne?
  3. Wie?
Andrei
quelle
2
Warum wird dies abgelehnt? Ich glaube, NuGet wird für .net-Kern-Apps benötigt. Andernfalls können Sie die Pakete lokal klonen und Ihren eigenen Feed bereitstellen.
Roydukkey
Normalerweise berühren Sie die Sperrdatei nicht. Sie würden die Datei project.json selbst ändern, und die Sperrdatei wird sich selbst aktualisieren, wenn Sie die Tools ausführen.
Gretro
2
Ihre Frage Nr. 2 ist gut und verdient meiner Meinung nach eine eigene SO-Frage.
Nate Barbettini
Siehe auch: NuGet Docs: Project.json Referenz
Metro Smurf

Antworten:

99

Update : project.jsonwurde durch .csprojals Hauptprojektdatei für .NET Standard-Projekte ersetzt. Diese Frage bezieht sich auf das alte System vor der Einführung von PackageReference in NuGet 4.0 .

Sie können gelegentlich immer noch project.lock.jsonals Artefakt des Erstellungsprozesses sehen, aber es sollte ignoriert werden. Die Verwaltung der NuGet-Pakete, von denen Ihr .NET Standard / .NET Core-Projekt abhängt, sollte immer von beiden durchgeführt werden

  • Bearbeiten der .csprojDatei direkt
  • Verwenden der Dotnet-CLI ( dotnet add packageusw.)
  • Verwenden der GUI des Paketmanagers, wenn Sie Visual Studio verwenden

Alte Antwort für die Nachwelt: project.lock.jsonWird vom .NET-Tool generiert, wenn Sie die Projektpakete wiederherstellen. Sie sollten es nicht berühren oder in die Quellcodeverwaltung einchecken. project.jsonDirekt bearbeiten .

Während des Paketwiederherstellungsprozesses ( dotnet restore) muss NuGet die Abhängigkeiten in Ihrem Projekt analysieren, ihre Abhängigkeitsdiagramme durchgehen und herausfinden, welche Pakete für Ihr Projekt und die Abhängigkeiten Ihres Projekts installiert werden sollen.

Dies ist eine nicht triviale Menge an Arbeit, daher werden die Ergebnisse zwischengespeichert project.lock.json, um nachfolgende Wiederherstellungen schneller und effizienter zu machen. Die Sperrdatei wird neu generiert, wenn sie project.jsongeändert und dotnet restoreerneut ausgeführt wird.

Nate Barbettini
quelle
3
Siehe auch: NuGet Docs: Project.json Referenz
Metro Smurf
2

Ab und zu haben wir in unserem Team das gleiche Problem, wenn jemand ein Nuget aktualisiert. Die lock.json-Dateien werden nicht aktualisiert, selbst wenn die Dotnet-Wiederherstellung ausgeführt wird. Bevor Sie die letzte Option anwenden (löschen), schlage ich vor, grunzen von Ihrer Kommandozeile. Wenn das nicht funktioniert, lösche alle lock.json-Dateien und führe die dotnet-Wiederherstellung aus . Dies ist meine Lieblingswahl;)

xisket
quelle
3
Was hat Grunzen damit zu tun project.lock.json?
Nate Barbettini
1
nicht verwechseln package-lock.jsonmitproject.lock.json
Myster