2016-07-15 70 views
1

Ich bin neu auf dot.net Core und versuchte das Beispiel, Dotnet neu, Dotnet Restore, Dotnet Run..net core: Warum dotnet restore generiert eine "lock" -Datei, was nützt es?

Nach dem zweiten Schritt (dotnet Restore), habe ich versucht, diese Sperrdatei zu löschen, dann "dotnet run" schlägt fehl, da es sagt, dass es eine Sperrdatei benötigt. Warum hat Microsoft eine solche "Sperr" -Datei entworfen und warum benötigt der "run" -Befehl eine solche Sperrdatei?

Wenn diese Sperrdatei entwickelt wurde, um zu verhindern, dass mehrere Prozesse das Projekt erstellen, dann muss es nur eine leere Datei sein, die als "Sperre" fungiert. Tatsächlich ist diese Datei verglichen mit anderem Quellcode ziemlich groß.

+0

machen .NETCore auf Unix-Betriebssystem läuft unweigerlich führt [Unix-ähnliche Artefakte] (http: // Unix .stackexchange.com/questions/12815/was-sind-pid-und-lock-files-for). –

+5

Mögliches Duplikat von [Was ist project.lock.json?] (Http://stackoverflow.com/questions/38065611/what-is-project-lock-json) –

Antwort

7

Wenn Sie sich die Sperrdatei ansehen, sehen Sie, dass sie Details der genauen Version jeder Abhängigkeit enthält, die transitiv wiederhergestellt wurde. Dies "sperrt" diesen Satz von Versionen, bis dotnet restore erneut ausgeführt wird.

ich glaube, das Ziel mindestens war es Entwicklern zu erlauben, ob oder nicht zu entscheiden project.lock.json Dateien in die Quellcodeverwaltung zu überprüfen, mehr Kontrolle über genau zu geben, wenn aktualisiert Abhängigkeiten verwendet werden würde. Ich denke, es gibt immer noch Diskussionen darüber, wann/ob das eine gute Idee ist.

Es ermöglicht auch mehreren Tools, den Abhängigkeitsgraphen direkt zu betrachten, ohne ihn erneut berechnen zu müssen (möglicherweise instabil, wenn sich Abhängigkeiten ändern).

+0

Ich bekomme jetzt den Fehler auf 'dotnet restore'. Wie ist das möglich? – mbob

+0

@mbob: Ich schlage vor, Sie stellen eine neue Frage mit Ihrer project.json (oder besser, eine minimale, die immer noch das Problem zeigt) und den genauen Fehler, den Sie bekommen. Stellen Sie sicher, dass Sie auch Details zu der Version von .NET Core SDK angeben, die Sie verwenden, da neue Versionen csproj anstelle von project.json verwenden –

0

gibt es Unterschiede. Wenn Sie den Inhalt der Datei untersuchen, sehen Sie, dass sie eine vollständige Liste aller NuGet-Pakete enthält, die von der App verwendet werden. Dies ist nicht unbedingt dasselbe wie das, was in project.json enthalten ist, da project.json Platzhalter verwenden kann und vage über seine Versionen sein kann (z. B. 1.0.0. *). Es ist auch viel vollständiger als project.json, da es alle Bibliotheken enthält, die in den in project.json angegebenen Frameworks enthalten sind. Hier ist ein kleiner Auszug aus einer project.json.lock Datei:

entnommen aus: https://blog.falafel.com/what-is-project-lock-json/

    "locked": false, 
        "version": -9996, 
        "targets": { 
       "DNX,Version=v4.5.1": { 
        "Microsoft.AspNet.DataProtection.Abstractions/1.0.0-beta5": { 
        "dependencies": { 
         "Microsoft.Framework.Runtime.Abstractions": "1.0.0-beta5" 
        }, 
        "frameworkAssemblies": [ 
         "mscorlib", 
         "System", 
         "System.Core", 
         "Microsoft.CSharp" 
        ], 
        "compile": { 
         "lib/dnx451/Microsoft.AspNet.DataProtection.Abstractions.dll": {} 
        }, 
        "runtime": { 
         "lib/dnx451/Microsoft.AspNet.DataProtection.Abstractions.dll": {} 
        } 
        }