.net core: เหตุใดการคืนค่า dotnet จึงสร้างไฟล์ล็อค มีประโยชน์อย่างไร

ฉันยังใหม่กับ dot.net core และลองใช้ตัวอย่าง, dotnet ใหม่, การกู้คืน dotnet, เรียกใช้ dotnet

หลังจากขั้นตอนที่ 2 (การกู้คืน dotnet) ฉันพยายามลบไฟล์ล็อคนี้ จากนั้น "dotnet run" ล้มเหลว ดังที่บอกว่าต้องใช้ไฟล์ล็อค เหตุใด Microsoft จึงออกแบบไฟล์ "ล็อค" และเหตุใดคำสั่ง "run" จึงต้องการไฟล์ล็อคดังกล่าว

หากไฟล์ล็อคนี้ได้รับการออกแบบมาเพื่อป้องกันหลายกระบวนการในการสร้างโปรเจ็กต์ ไฟล์นั้นจะต้องเป็นไฟล์เปล่าเท่านั้นและทำหน้าที่เป็น "ล็อค" แต่จริงๆ แล้ว ไฟล์นี้มีขนาดค่อนข้างใหญ่ เมื่อเทียบกับซอร์สโค้ดอื่นๆ


person Troskyvs    schedule 15.07.2016    source แหล่งที่มา
comment
การทำให้ .NETCore ทำงานบนระบบปฏิบัติการ Unix ย่อมทำให้เกิด สิ่งที่คล้าย Unix.   -  person Hans Passant    schedule 15.07.2016


คำตอบ (2)


หากคุณดูที่ไฟล์ล็อค คุณจะเห็นว่าไฟล์นั้นมีรายละเอียดเวอร์ชันที่แน่นอนของการขึ้นต่อกันแต่ละรายการที่ได้รับการกู้คืนแบบส่งผ่าน สิ่งนี้จะ "ล็อค" ชุดเวอร์ชันนั้นจนกว่า dotnet restore จะถูกรันอีกครั้ง

ฉันเชื่อว่าเป้าหมายอย่างน้อย คือ เพื่อให้นักพัฒนาตัดสินใจว่าจะตรวจสอบไฟล์ project.lock.json ในการควบคุมแหล่งที่มาหรือไม่ ทำให้สามารถควบคุมได้มากขึ้นว่าเมื่อใดที่การขึ้นต่อกันที่อัปเดตจะถูกนำมาใช้ ฉันคิดว่ายังคงมีการถกเถียงกันว่าเมื่อใด/ไม่ว่าจะเป็นความคิดที่ดีหรือไม่

นอกจากนี้ยังช่วยให้เครื่องมือต่างๆ ดูกราฟการขึ้นต่อกันได้โดยตรง โดยไม่จำเป็นต้องคำนวณอีกครั้ง (ในลักษณะที่อาจไม่เสถียร หากการขึ้นต่อกันเปลี่ยนแปลง)

person Jon Skeet    schedule 15.07.2016
comment
ตอนนี้ฉันได้รับข้อผิดพลาดใน dotnet restore เป็นไปได้ยังไง? - person mbob; 23.02.2017
comment
@mbob: ฉันขอแนะนำให้คุณถามคำถามใหม่กับ project.json ของคุณ (หรือดีกว่านั้น คำถามขั้นต่ำที่ยังคงแสดงให้เห็นถึงปัญหา) และข้อผิดพลาดที่แน่นอนที่คุณได้รับ ตรวจสอบให้แน่ใจว่าคุณให้รายละเอียดเกี่ยวกับเวอร์ชันของ .NET Core SDK ที่คุณใช้อยู่ด้วย เนื่องจากเวอร์ชันใหม่ใช้ csproj แทน project.json - person Jon Skeet; 23.02.2017

มีความแตกต่าง หากคุณตรวจสอบเนื้อหาของไฟล์ คุณจะเห็นว่าไฟล์นั้นมีรายการแพ็คเกจ NuGet ทั้งหมดที่แอปใช้อยู่ สิ่งนี้ไม่จำเป็นต้องเหมือนกับที่รวมอยู่ใน project.json เนื่องจาก project.json สามารถใช้ไวด์การ์ดและไม่ชัดเจนเกี่ยวกับเวอร์ชันต่างๆ (เช่น 1.0.0.*) นอกจากนี้ยังสมบูรณ์กว่า project.json อีกด้วย เนื่องจากมีไลบรารีทั้งหมดที่รวมอยู่ในเฟรมเวิร์กที่ระบุใน project.json นี่เป็นสารสกัดเล็กๆ จากไฟล์ project.json.lock:

นำมาจาก: 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