NuGet Package Pruning เป็น default ใน .NET 10 — ลด false-positive vulnerability 70% และเร่ง restore เร็วขึ้น 50%
วันที่ 18 พฤษภาคม 2026 Nikolche Kolev Principal Software Engineer ทีม NuGet โพสต์บน .NET Blog อธิบายฟีเจอร์สำคัญที่จะเปลี่ยน developer experience ของ .NET 10 — NuGet Package Pruning ทำงานเป็น default โดยอัตโนมัติ พร้อมกับ NuGetAuditMode=all ที่ scan vulnerability ของ transitive dependency ด้วย
ปัญหาเดิมคือ library จำนวนมากบน nuget.org ที่ targeting netstandard2.0 ยังลาก package อย่าง System.Text.Json, System.Memory หรือ System.IO.Pipelines มาเป็น transitive dependency ทั้งที่ runtime ของ .NET 10 ขนเวอร์ชันใหม่กว่าให้แล้ว ผลคือเวลามี CVE ออกสำหรับเวอร์ชันเก่า scanner จะร้องทั้งที่ตัวแอปไม่ได้ใช้
Package Pruning คืออะไร
Package pruning คือกลไกที่ NuGet ตัด package ออกจาก dependency graph ตอน restore ถ้า .NET Runtime Libraries มี package นั้นในเวอร์ชันเท่ากันหรือใหม่กว่าอยู่แล้ว ตัวกลไกแบ่งการจัดการเป็นสองกรณี
- Transitive package ที่อยู่ในช่วงที่ runtime คุ้ม จะถูกตัดออกจาก graph เลย ไม่ดาวน์โหลด ไม่โผล่ใน restore output และไม่ถูก audit ตามมา
- Direct PackageReference ในช่วงเดียวกัน NuGet จะใส่
PrivateAssets='all'และIncludeAssets='none'ให้ — สื่อชัดว่าจะใช้เวอร์ชันจาก runtime แทน และ package จะไม่ flow เข้าไปใน nuspec ของ output แต่ตัว<PackageReference>ยังอยู่ในไฟล์ csproj จนกว่าเจ้าของจะเอาออกเอง พร้อมเตือนผ่าน warning NU1510 เมื่อ reference นั้นสามารถลบทิ้งได้ทุก target framework
ตัวอย่างของ Kolev ใช้โปรเจกต์ net10.0 ที่อ้างอิง Microsoft.Extensions.AI กับ NuGet.Protocol — เดิม audit จะร้องว่า System.Formats.Asn1 6.0.0 มี CVE ระดับ High (GHSA-447r-wph3-92pm) แต่หลัง pruning เปิด package นั้นหายจาก transitive graph และ warning หายตามไป รวมถึง System.Diagnostics.DiagnosticSource, System.Text.Json และ System.Threading.Channels ก็ถูกตัดด้วย เพราะ runtime ขน in-box อยู่แล้ว
ตัวเลขที่ Microsoft เคลม
จาก telemetry ที่ทีมเก็บมา การเปิด default 2 ตัวพร้อมกัน (RestoreEnablePackagePruning=true + NuGetAuditMode=all) ให้ผลดังนี้
- ลด transitive vulnerability report ลง 70% เทียบกับ default เก่า
- restore สำเร็จในอัตราที่สูงกว่าโปรเจกต์ที่ปิด pruning
- restore time ลดได้ถึง 50% ในระดับโปรเจกต์ เพราะ graph เล็กลง conflict น้อยลง
- ในโปรเจกต์ multi-target ถ้ามี framework ใด framework หนึ่งเป็น
net10.0หรือใหม่กว่า pruning จะ apply ทั่วทั้งโปรเจกต์
Pruning ตัวจริงไม่ใช่ของใหม่หมด — มันมาเป็น opt-in ตั้งแต่ .NET SDK 9.0.200 แต่ .NET 10 คือเวอร์ชันแรกที่เปิดทำงานโดย default ผ่าน MSBuild property <RestoreEnablePackagePruning>true</RestoreEnablePackagePruning> กับ <NuGetAuditMode>all</NuGetAuditMode>
มุมมอง AI Curator
ตัวเลข 70% ลด false-positive vulnerability เป็นเรื่องที่ทีม security ของ enterprise ไทยควรอ่านอย่างจริงจัง — เพราะหลายปีที่ผ่านมา CVE noise คือเหตุผลหลักที่ทีม dev มอง audit เป็นภาระแทนที่จะเป็นประโยชน์ พอ scanner ยิง warning จำนวนมหาศาลที่ตัวแอปไม่ได้ใช้จริง คนทำ remediation ก็เริ่มชินกับการ “กดข้าม” ความเสี่ยงจริงๆ ก็จะหลุดไปด้วย
ในยุคที่ supply chain attack ทำกับ library popular กันเป็นรายเดือน (npm, PyPI, Maven ก็โดนกันถ้วนหน้า) การที่ Microsoft ทำให้ default ของ tooling สอดคล้องกับความเป็นจริงของ runtime ถือเป็นเทรนด์ที่ภาษาอื่นน่าจะตามมา — แทนที่จะปล่อยให้ developer ต้องเรียนรู้วิธี exclude transitive ที่ไม่ได้ใช้เอง ตัวระบบควรจัดให้ตั้งแต่ต้น
สำหรับ developer ไทยที่ใช้ .NET ในงานองค์กร โดยเฉพาะธนาคารและ healthcare ที่มี vulnerability scanning เป็น compliance gate การ migrate ไป .NET 10 จะลดเวลาที่เสียกับ false-positive ลงไปได้มาก — และเป็นตัวอย่างของกรณีที่ “อัปเกรด runtime” ส่งผลโดยตรงต่อ developer productivity และ security posture พร้อมกัน
แหล่งข่าว
อ่านเพิ่มในหมวด เครื่องมือนักพัฒนา
Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ
Betelgeuse ฟอร์ก llama.cpp ที่เปิดเมื่อ 31 ต.ค. ดึง expert จาก NVMe เข้า VRAM ตามต้องการ อ้าง 22 tok/s แบบไม่ทิ้ง expert แต่ README เตือนเองว่ายังทดลองและตัวเลขมาจากคนละรอบ วันเดียวกันผู้พัฒนา Basalt เผยผลวัดว่าแฟล็กเร่งความเร็วทำคุณภาพ Q8 ตกไปใกล้ Q2
กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง
ต่อจากที่เราพบกฎนี้ในไบนารี Claude Code ผู้ใช้เริ่มรายงานว่างานเชิงพาณิชย์ถูกปฏิเสธ และ Tom's Hardware กับ Mashable หยิบไปรายงาน แต่เมื่อไล่ issue ที่อ้างถึง พบว่าหลายรายการเกิดก่อนกฎจะมา จึงน่าจะเป็นตัวกรองด้านไซเบอร์ ส่วน Anthropic ยังไม่ชี้แจง
Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้
รายงานอิสระพบว่าฟีเจอร์ agent_summary ของ Claude Code ส่ง transcript เต็มของ background agent ไปถามสถานะทุก ~30 วินาที คิดเป็น 16.4% ของค่าใช้จ่ายในระบบของผู้วัด Issue เปิดมาตั้งแต่ ส.ค. ยังไม่มีสวิตช์ปิดที่รองรับ เราตรวจพบโค้ดนี้ใน 2.1.314 และพบกฎใหม่เรื่องเกมที่ไม่อยู่ใน changelog