ใน .NET เวอร์ชั่น 2.0 ขึ้นไปเราไม่ต้อง run คำสั่ง dotnet restore อีกต่อไปแล้ว เพราะเมื่อท่านใช้คำสั่งที่ต้องการ dotnet restore NuGet จะ run ให้เองโดยอัตโนมัติ
dotnet restore เป็นคำสั่งหรับดึง dependency ไฟล์ต่างๆ เช่นไฟล์ Assembly ที่เป็น library ของ .NET Core และเครื่องเมื่ออื่น ๆ ที่โปรเจ็กต์นั้นต้องการใช้ โดยดาวน์โหลดซอฟต์แวร์ผ่านบริการของ NuGet เป็นคำสั่งที่มีมาตั้งแต่ .NET Core เวอร์ชั่น 1.x โดยการดึง dependency และเครื่องมือจะเกิดขึ้นพร้อม ๆ กันและทำงานขนานกัน
NuGet คือกลไกการใช้โค้ดร่วมกัน มันทำหน้าที่กำหนดการนิยาม การเก็บ และการนำโค้ดมาใช้งาน
โดยจะมีเครื่องมือสำหรับแต่ละหน้าที่มาให้ NuGet จับรวมสิ่งที่เกี่ยวข้องกันบีบอัดไว้เป็นซิปไฟล์ที่มีนามสกุล .nupkg เรียกว่า package
ในนั้นอาจประกอบด้วยโค้ดที่คอมไพล์แล้ว (อยู่ในสภาพ DLL : Dynamic Liked Library) และไฟล์อื่น ๆ ที่เกี่ยวข้องกับโค้ดนั้น เช่น ไฟล์ manifest ซึ่งเป็นไฟล์ที่เก็บข้อมูลพรรณนาลักษณะของ DLL นั้น ๆ เช่นหมายเลขเวอร์ชั่น นักพัฒนา ฯ สามารถสร้างเพ็กเกจลักษณะนี้เพื่อแบ่งปันโค้ดร่วมกันกับนักพัฒนา ฯ อื่น ๆ ได้โดยสะดวก
การที่จะดึง package ที่เป็น dependency ได้ NuGet จำเป็นต้องอาศัยสิ่งที่เรียกว่า feed ซึ่งเป็นไฟล์เก็บข้อมูลว่าจะให้ไปเอา package มาจากที่ใด
เราสามารถสร้าง feed เป็นไฟล์ชื่อ NuGet.cofig เก็บไว้ในโฟลเดอร์ของโปรเจ็กต์หรือจะป้อนที่ command prompt โดยใช้ argument –packages ก็ได้
แต่ถ้าไม่ได้กำหนดไว้ NuGet จะไปอ่านเอาจาก cache ที่อยู่ในโฟลเดอร์ .nuget/packages ของ “home folder” ของผู้ใช้ที่มีอยู่ในทุกระบบปฏิบัติการ
ยกตัวอย่างเช่นในระบบปฏิบัติการ Linux จะเป็นโฟลดอร์ /home/user1 ถ้าเป็นระบบปฏิบัติการวินโดวส์จะเป็นโฟลเดอร์ C:\Users\user1
ลำดับการทำงานของคำสั่ง dotnet restore คือ มันจะดึง package ที่มีเครื่องมือที่จำเป็นต้องใช้สำหรับโปรเจ็กต์นั้น ๆ
จากนั้นก็มาดูว่าเครื่องมือแต่ละตัวมี dependency อะไรบ้าง และจะไปไล่ดึง package ที่มี dependency มาจนครบทุกตัว
แต่เราสามารถเปลี่ยนแปลงการทำงานของ dotnet restore โดยนำข้อกำหนดไปใส่ไว้ในไฟล์ NuGet.config เองก็ได้
ยกตัวอย่างเช่นเราอาจระบุได้ว่าต้องการให้เอา package ต่าง ๆ ที่ดาวน์โหลดมาไปเก็บไว้ที่ไหนโดยการแก้ไขหัวข้อ globalPackagesFolder ที่อยู่ภายใน NetGet.config

โค้ดภายในไฟล์ NetGet.config เป็นภาษา XML ที่มี node ระดับบนสุดคือ <configuration>
ภายในนั้นจะมี node ย่อยต่าง ๆ เช่น <config> <bindingRedirects> และ <solution> เป็นต้น
node ย่อยเหล่านี้ทำหน้าที่กำหนดภาคต่าง ๆ โดยภายในแต่ละภาคจะมีหน่วยที่มี attribute เป็นคำสั่ง add ตามด้วยกุญแจที่คู่กับค่า (key/value)
ยกตัวอย่างบรรทัดที่ 2 จะเห็นคำสั่ง add ตามด้วย key คือ nugget.org ส่วน value ที่มีค่าเป็น URL ที่ระบุ server ของ NuGet ภายในหนึ่งภาคอาจมี attribute ได้หลายอัน
โค้ดบรรทัดที่ 1 ถึง 5 คือภาค <packageSources> ทำหน้าที่แสดงรายการแหล่งที่มาของ package
เมื่อ NuGet ทำกระบวนการ restore มันจะตรวจดูรายการเหล่านี้เพื่อใช้เป็นแหล่งต้นทางของการดาวน์โหลด package
ในโค้ดตัวอย่างนี้มี source อยู่สามแหล่ง
สองแหล่งแรกคือ "nuget.org" และ "Contoso" ระบุเป็น URL เพื่อการดาวน์โหลดผ่านอินเตอร์เน็ต
ส่วนอันที่สาม "Test Source" ระบุเป็นเส้นทางของไฟล์เพื่อการนำ package มาจากฮาร์ดดิสก์ของคอมพิวเตอร์เครื่องนั้น
โค้ดบรรทัดที่ 7 ถึง 16 คือภาค <packageSourceCredentials> กำหนดชื่อผู้ใช้และรหัสผ่านสำหรับการดาวน์โหลด source
โดยจะมี node ย่อยสำหรับแหล่งต้นทางของการดาวน์โหลด package แยกต่างหากจากกัน
บรรทัดที่ 8 ถึง 11 เป็นของ "Contoso"
ขณะที่บรรทัดที่ 22 ถึง 15 เป็นของ "Test Source"
โปรดสังเกตคำว่า "Test Source" มีเคาะวรรคอยู่ภายในเมื่อนำมาเป็นชื่อ node จะต้องแทนที่เคาะวรรคด้วย x0020 ทำให้มีชื่อ node เป็น <Test_x0020_Source>
โค้ดบรรทัด 18 ถึง 27 เป็นตัวอย่างภาค <packageSourceCredentials> ที่มีรหัสผ่านเป็นชนิด "ClearTextPassword" ซึ่งหมายถึงการใช้รหัสผ่านแบบไม่เข้ารหัส (unencrypted password)

ใน NuGet เวอร์ชัน 3.4 ขึ้นไปเราสามารถกำหนดการทำงานของมันร่วมกับตัวแปรสภาพแวดล้อม (environment variable) ของระบบปฏิบัติการได้
ยกตัวอย่างเช่นตัวแปรสภาพแวดล้อม home ของระบบปฏิบัติการวินโดวส์ถูกกำหนดไว้เป็น c:\users\username
ดังนั้นหากเรากำหนด %HOME%\NuGetRepository ไว้ใน NuGet.config จะมีผลให้ NuGet แปลความหมายเป็น c:\users\username\NuGetRepository
ในกรณีระบบปฏิบัติการ Linux หรือ Mac OSกำหนดค่าของตัวแปรสภาพแวดล้อม home ไว้เป็น /home/myStuff
หากเรากำหนดค่าใน NuGet.config ไว้เป็น %HOME%/NuGetRepository จะได้ผลลัพธ์เป็น /home/myStuff/NuGetRepository
ในโค้ดตัวอย่างบรรทัด 12 เรากำหนดค่าของ "repositoryPath" ให้มีค่าเป็น "%PACKAGEHOME%\External" ซึ่งเป็นการกำหนดเส้นทางไฟล์แบบระบบปฏิบัติการวินโดวส์
หากเป็นระบบปฏิบัติการ Linux หรือ Mac OS จะต้องเขียนว่า $PACKAGE_HOME/External แทน บรรทัด 19 key "defaultPushSource" ทำหน้าที่ระบุตำแหน่ง server สำหรับคำสั่ง push บรรทัด 22-24 แสดงตัวอย่างการกำหนดค่า proxy server โดยมีรายการเป็น ชื่อ server ชื่อผู้ใช้ และรหัสผ่าน (สำหรับ proxy) ตามลำดับ
บรรทัด 27 ถึง 33 คือ node <packageRestore> ทำหน้าที่กำหนดพฤติกรรมการ restore ของ NuGet
ยกตัวอย่างเช่น บรรทัด 29 คีย์ "enabled" เป็นตัวกำหนดว่าอนุญาตให้ NuGet ดาวน์โหลด package ที่ขาดหายไปหรือไม่
key “automatic” ในบรรทัด 32 กำหนดว่าให้หา package ที่หายไปขณะติดตั้งโปรแกรม visual studio ด้วยหรือไม่
ใน .NET Core เวอร์ชั่น 2 เป็นต้นไป กระบวนการของคำสั่ง dotnet restore จะเริ่มโดยอัตโนมัติเมื่อเราใช้สั่งคำสั่งใดคำสั่งหนึ่งต่อไปนี้
dotnet new => สร้างโปรเจ็กต์ใหม่
dotnet build => build โปรเจ็กต์
dotnet build server => มีปฏิสัมพันธ์กับ server ที่ถูกเริ่มการทำงานโดยการ build
dotnet run => run sourcecode
dotnet test => run หน่วยทดสอบ (Unit test)
dotnet publish => จับโค้ดและ dependency ทั้งหมดมาทำเป็น package เพื่อการ deploy
dotnet pack => จับโค้ดทั้งหมดอัดเป็น package สำหรับ NuGet
ถ้าไม่อยากให้เริ่มกระบวนการของคำสั่ง dotnet restore โดยอัตโนมัติก็ทำได้เหมือนกัน เพราะมีบางกรณีการ run dotnet restore โดยอัตโนมัติอาจทำให้ไม่สะดวก
ยกตัวอย่างเช่น ระบบอัตโนมัติบางแบบเช่นระบบการ build โปรแกรมที่จำเป็นต้องเรียกคำสั่ง dotnet restore เองเพื่อจะได้ควบคุมการใช้งานเครือข่ายได้
วิธียกเลิกการ restoreโดยอัตโนมัติทำได้โดยใส่ตัวเลือก --no-restore ต่อท้ายแต่ละคำสั่งที่ว่ามาข้างต้น











