.net core: Mengapa dotnet restore menghasilkan file kunci, apa gunanya?

Saya baru mengenal dot.net core dan mencoba sampel, dotnet baru, pemulihan dotnet, dotnet run.

Setelah langkah ke-2 (pemulihan dotnet), saya mencoba menghapus file kunci ini, kemudian "dotnet run" gagal, karena dikatakan memerlukan file kunci. Mengapa Microsoft merancang file "kunci" dan mengapa perintah "jalankan" memerlukan file kunci seperti itu?

Jika file kunci ini dirancang untuk mencegah banyak proses untuk membangun proyek, maka file tersebut hanya harus berupa file kosong, bertindak sebagai "kunci". Namun nyatanya file ini cukup besar dibandingkan dengan source code lainnya.


person Troskyvs    schedule 15.07.2016    source sumber
comment
Membuat .NETCore berjalan di sistem operasi Unix pasti akan menimbulkan artefak mirip unix.   -  person Hans Passant    schedule 15.07.2016
comment
Kemungkinan duplikat Apa itu project.lock.json?   -  person Nate Barbettini    schedule 16.07.2016


Jawaban (2)


Jika Anda melihat file kunci, Anda akan melihat bahwa file tersebut berisi detail versi pasti dari setiap dependensi yang dipulihkan, secara transitif. Ini "mengunci" kumpulan versi tersebut hingga dotnet restore dijalankan kembali.

Saya yakin tujuannya setidaknya adalah untuk memungkinkan pengembang memutuskan apakah akan memeriksa file project.lock.json ke dalam kontrol sumber atau tidak, memberikan kontrol lebih besar terhadap kapan tepatnya dependensi yang diperbarui akan digunakan. Saya rasa masih ada perdebatan mengenai kapan/apakah itu ide yang bagus.

Hal ini juga memungkinkan beberapa alat untuk melihat grafik ketergantungan secara langsung, tanpa perlu menghitungnya lagi (dengan cara yang mungkin tidak stabil, jika ketergantungan berubah).

person Jon Skeet    schedule 15.07.2016
comment
Saya sekarang mendapatkan kesalahan pada dotnet restore. Bagaimana mungkin? - person mbob; 23.02.2017
comment
@mbob: Saya sarankan Anda mengajukan pertanyaan baru dengan project.json Anda (atau lebih baik, pertanyaan minimal yang masih menunjukkan masalahnya) dan kesalahan persis yang Anda dapatkan. Pastikan Anda memberikan detail tentang versi .NET Core SDK yang Anda gunakan juga, mengingat versi baru menggunakan csproj, bukan project.json - person Jon Skeet; 23.02.2017

ada perbedaan. Jika Anda memeriksa konten file, Anda akan melihat bahwa file tersebut menyertakan daftar lengkap semua paket NuGet yang digunakan aplikasi. Ini belum tentu sama dengan apa yang disertakan dalam project.json, karena project.json dapat menggunakan karakter pengganti dan versinya tidak jelas (misalnya 1.0.0.*). Ini juga jauh lebih lengkap daripada project.json, karena mencakup semua perpustakaan yang termasuk dalam kerangka kerja yang ditentukan di project.json. Berikut ekstrak kecil dari file project.json.lock:

diambil dari: 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": {}
                    }
                  }
person robert jebakumar2    schedule 14.03.2017