2016-07-15 1 views
1

Je suis nouveau à dot.net core et j'ai essayé l'échantillon, dotnet new, dotnet restore, dotnet run. Après la deuxième étape (restauration dotnet), j'ai essayé de supprimer ce fichier de verrouillage, puis "dotnet run" échoue, car il dit qu'il a besoin d'un fichier de verrouillage. Pourquoi Microsoft a-t-il conçu un tel fichier "lock" et pourquoi la commande "run" nécessite-t-elle un tel fichier de verrouillage?.net core: Pourquoi dotnet restore génère un fichier "lock", à quoi ça sert?

Si ce fichier de verrouillage est conçu pour empêcher la création de plusieurs projets, il doit uniquement s'agir d'un fichier vide, agissant comme un "verrou". Mais en fait, ce fichier est assez volumineux, comparé à d'autres sources.

+0

Faire .NETCore fonctionner sur le système d'exploitation Unix introduit inévitablement [artefacts unix-like] (http: // unix .stackexchange.com/questions/12815/what-are-pid-and-lock-files-for). –

+5

Copie possible de [Qu'est-ce que project.lock.json?] (Http://stackoverflow.com/questions/38065611/what-is-project-lock-json) –

Répondre

7

Si vous regardez le fichier de verrouillage, vous verrez qu'il contient des détails sur la version exacte de chaque dépendance qui a été restaurée, de manière transitoire. Cela "verrouille" cet ensemble de versions jusqu'à ce que dotnet restore soit réexécuté.

je crois que le but était au moins pour permettre aux développeurs de décider si oui ou non pour vérifier project.lock.json fichiers dans le contrôle source, ce qui donne plus de contrôle sur exactement quand les dépendances mises à jour seront utilisées. Je pense qu'il y a encore un débat sur quand/si c'est une bonne idée.

Il permet également à plusieurs outils de visualiser directement le graphe de dépendance, sans avoir besoin de le calculer à nouveau (de manière éventuellement instable, si les dépendances changent).

+0

Je reçois maintenant l'erreur sur 'dotnet restore'. Comment est-ce possible? – mbob

+0

@mbob: Je vous suggère de poser une nouvelle question avec votre projet.json (ou mieux, une question minimale qui démontre encore le problème) et l'erreur exacte que vous obtenez. Assurez-vous de fournir des détails sur la version de .NET Core SDK que vous utilisez également, étant donné que les nouvelles versions utilisent csproj au lieu de project.json –

0

il existe des différences. Si vous examinez le contenu du fichier, vous verrez qu'il inclut une liste complète de tous les paquets NuGet utilisés par l'application. Ce n'est pas nécessairement la même chose que ce qui est inclus dans project.json, car project.json peut utiliser des caractères génériques et être vague sur ses versions (par exemple 1.0.0. *). C'est aussi beaucoup plus complet que project.json, car il inclut toutes les bibliothèques incluses dans les frameworks spécifiés dans project.json. Voici un petit extrait d'un fichier project.json.lock:

tirée de: 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": {} 
        } 
        }