แก้ error “Error while fetching extensions” ใน VS Code

เปิดแท็บ Extensions ใน VS Code แล้วขึ้นข้อความสีแดงแบบนี้แทนที่จะเห็นรายการ extension ตามปกติ

Error while fetching extensions. XHR failed

error while fetching extensions เกิดจาก VS Code เชื่อมต่อไปยัง Marketplace (เซิร์ฟเวอร์ของ Microsoft ที่เก็บ extension ทั้งหมด) ไม่สำเร็จ ไม่ใช่ปัญหาที่ตัว VS Code เองพัง สาเหตุเกือบทั้งหมดมาจากเรื่องเครือข่าย บทความนี้จะไล่เช็คทีละสาเหตุจากที่พบบ่อยที่สุดไปน้อยสุด

ต่างจาก error อื่นๆ ใน VS Code ที่มักเกี่ยวกับตัว extension เอง error นี้เกิดขึ้นก่อนที่จะโหลดรายการ extension ได้ด้วยซ้ำ นั่นหมายความว่าปัญหาอยู่ที่ชั้นการเชื่อมต่อเครือข่ายล้วนๆ ไม่เกี่ยวกับ extension ตัวไหนที่ติดตั้งอยู่แล้ว หรือการตั้งค่าภายในโปรเจกต์เลย ทำให้แก้ได้ตรงจุดง่ายกว่า error ประเภทอื่นถ้าไล่เช็คตามลำดับที่ถูกต้อง

สาเหตุที่พบบ่อยที่สุด

อินเทอร์เน็ตหลุดหรือช้าผิดปกติ — เช็คก่อนเป็นอันดับแรกด้วยการเปิดเว็บไซต์อื่นดูว่าใช้งานได้ปกติไหม

อยู่หลัง proxy หรือ firewall ขององค์กร — พบบ่อยมากในเครื่องบริษัทหรือมหาวิทยาลัยที่บล็อกการเชื่อมต่อออกไปยังบางโดเมนโดยอัตโนมัติ Marketplace ของ VS Code ใช้โดเมน marketplace.visualstudio.com และ gallery.vsassets.io ถ้า proxy บล็อกโดเมนพวกนี้ VS Code จะเชื่อมต่อไม่ได้ทันที

เปิด VPN อยู่และ VPN นั้นบล็อกบางเส้นทาง — VPN บางตัว (โดยเฉพาะ VPN ฟรีหรือ VPN องค์กรที่ตั้งกฎเข้มงวด) เปลี่ยนเส้นทางการเชื่อมต่อจนเข้าถึง Marketplace ไม่ได้

DNS ของเครื่องแก้โดเมนไม่ได้ชั่วคราว — เกิดขึ้นได้แม้อินเทอร์เน็ตปกติดี เพราะ DNS server ที่เครื่องใช้อยู่อาจมีปัญหาแค่ชั่วคราว หรือ cache DNS เก่าที่เครื่องเก็บไว้ชี้ไปยัง IP ที่ใช้งานไม่ได้แล้ว

วิธีแก้ทีละขั้นตอน

ขั้นที่ 1: เช็คว่า proxy ตั้งค่าถูกไหม

ถ้าอยู่ในเครือข่ายที่ต้องผ่าน proxy เปิด Settings ใน VS Code (Ctrl+,) แล้วค้นหาคำว่า proxy ตรวจสอบค่า Http: Proxy ว่าตั้งไว้ถูกต้องตามที่ฝ่าย IT ให้มาหรือไม่ หรือแก้ตรงในไฟล์ settings.json ก็ได้

"http.proxy": "http://proxy.company.com:8080"

ถ้าไม่แน่ใจว่าใช้ proxy อะไร ลองถามฝ่าย IT ขององค์กร หรือเช็คจากการตั้งค่า proxy ของ Windows ที่ Settings → Network & Internet → Proxy ซึ่งมักตั้งค่าเดียวกันกับที่โปรแกรมอื่นในเครื่องใช้อยู่แล้ว

ขั้นที่ 2: ปิด VPN ชั่วคราวแล้วลองใหม่

ถ้าเปิด VPN อยู่ ลองปิดชั่วคราวแล้วเปิด Extensions panel ใหม่ ถ้ากลับมาใช้งานได้ปกติ แปลว่า VPN คือสาเหตุ อาจต้องเปลี่ยน VPN server หรือขอ whitelist โดเมน Marketplace จากผู้ดูแล VPN นั้น

ขั้นที่ 3: เช็ค DNS ของเครื่อง

ลอง flush DNS cache เพื่อบังคับให้เครื่องแก้โดเมนใหม่ บน Windows เปิด Command Prompt แบบ Administrator แล้วพิมพ์

ipconfig /flushdns

ถ้ายังไม่หาย ลองเปลี่ยน DNS server ของเครื่องเป็น public DNS เช่น 1.1.1.1 หรือ 8.8.8.8 ชั่วคราวเพื่อทดสอบว่า DNS เดิมของเครือข่ายมีปัญหาหรือไม่

ขั้นที่ 4: ล้าง cache ของ VS Code

บางครั้ง cache ของ VS Code เองเสียหายจนทำให้เชื่อมต่อ Marketplace ผิดปกติ ปิด VS Code ให้สนิทก่อน แล้วลบโฟลเดอร์ cache ตามระบบปฏิบัติการ

บน Windows อยู่ที่

%APPDATA%\Code\Cache
%APPDATA%\Code\CachedData

บน Mac อยู่ที่

~/Library/Application Support/Code/Cache
~/Library/Application Support/Code/CachedData

ลบโฟลเดอร์เหล่านี้ทิ้ง (VS Code จะสร้างใหม่เองอัตโนมัติ ไม่กระทบการตั้งค่าหรือ extension ที่ติดตั้งไว้แล้ว) แล้วเปิด VS Code ใหม่อีกครั้ง

ขั้นที่ 5: เช็คว่า Marketplace ล่มฝั่ง Microsoft เองหรือเปล่า

บางครั้งปัญหาไม่ได้อยู่ที่เครื่องเราเลย แต่ Marketplace ของ Microsoft ล่มชั่วคราว เช็คสถานะได้จากหน้า status ของ Azure DevOps (บริการที่ Marketplace วิ่งอยู่บน) หรือลองเข้าเว็บ marketplace.visualstudio.com ตรงๆ ผ่านเบราว์เซอร์ดูว่าเปิดได้ปกติไหม ถ้าเปิดเว็บไม่ได้เหมือนกัน แปลว่าไม่ใช่ปัญหาที่ VS Code แต่เป็นปัญหาฝั่งเซิร์ฟเวอร์ ต้องรอให้กลับมาใช้งานได้ปกติ

ติดตั้ง extension แบบ manual เมื่อเข้า Marketplace ไม่ได้เลย

ถ้าลองทุกวิธีแล้วยังเข้า Marketplace ไม่ได้ (เช่น อยู่ในเครือข่ายที่บล็อกถาวรและแก้ไม่ได้) ยังติดตั้ง extension ได้ผ่านไฟล์ .vsix โดยตรง

  1. เปิดเบราว์เซอร์ (เครื่องไหนก็ได้ที่เข้าเน็ตปกติ) ไปที่หน้า extension บน marketplace.visualstudio.com แล้วกด “Download Extension” เพื่อดาวน์โหลดไฟล์ .vsix
  2. คัดลอกไฟล์มาที่เครื่องที่มีปัญหา
  3. เปิด VS Code แล้วกด Ctrl+Shift+P เปิด Command Palette พิมพ์ Extensions: Install from VSIX... แล้วเลือกไฟล์ที่ดาวน์โหลดมา

วิธีนี้ใช้ได้กับทุกกรณี ไม่ต้องพึ่งการเชื่อมต่อ Marketplace เลย แต่ข้อเสียคือต้องอัปเดต extension ด้วยมือเองทุกครั้งที่มีเวอร์ชันใหม่ ไม่ได้อัปเดตอัตโนมัติเหมือนติดตั้งผ่าน Marketplace ปกติ เหมาะใช้เป็นทางออกชั่วคราวระหว่างรอฝ่าย IT แก้ปัญหาเครือข่ายให้ หรือใช้ถาวรไปเลยถ้าทำงานในเครือข่ายที่มีข้อจำกัดด้านความปลอดภัยสูงและไม่สามารถเปิดให้เชื่อมต่อ Marketplace ได้

ปัญหา SSL certificate ในเครือข่ายองค์กร

องค์กรบางแห่งใช้ระบบตรวจสอบเครือข่ายที่เรียกว่า SSL inspection หรือ man-in-the-middle proxy ซึ่งจะสับเปลี่ยน SSL certificate ของทุกเว็บไซต์ที่เชื่อมต่อออกไปด้วย certificate ของบริษัทเอง เพื่อตรวจสอบเนื้อหาที่ส่งผ่านเครือข่าย ปัญหาคือ VS Code (เหมือนโปรแกรมอื่นๆ) จะไม่เชื่อถือ certificate แปลกปลอมนี้โดยอัตโนมัติ ทำให้การเชื่อมต่อ Marketplace ล้มเหลวแม้ proxy จะตั้งค่าไว้ถูกต้องแล้วก็ตาม

อาการที่บ่งชี้ว่าเป็นปัญหานี้คือลองปิด proxy/VPN แล้วก็ยังเจอ error เหมือนเดิม แต่โปรแกรมอื่นที่ไม่เข้มงวดเรื่อง certificate กลับใช้งานได้ปกติ มักเจอในองค์กรขนาดใหญ่ที่มีนโยบายความปลอดภัยเข้มงวดเป็นพิเศษ วิธีแก้คือขอไฟล์ certificate ของบริษัท (มักเป็นไฟล์ .crt หรือ .pem) จากฝ่าย IT แล้วชี้ให้ VS Code เชื่อถือ certificate นั้นเพิ่มเติมผ่านการตั้งค่า

"http.systemCertificates": true

ค่านี้บอกให้ VS Code ใช้ certificate store ของระบบปฏิบัติการ (ที่ฝ่าย IT มักติดตั้ง certificate องค์กรไว้อยู่แล้วผ่าน Group Policy) แทนที่จะพึ่ง certificate ของตัวเองเพียงอย่างเดียว ถ้าองค์กรยังไม่ได้ติดตั้ง certificate ไว้ในเครื่อง อาจต้องขอไฟล์มาติดตั้งเองเพิ่มเติมก่อน

ปัญหาที่เกี่ยวข้องกันบ่อย

“Error loading webview” — มักเจอคู่กันเวลา extension บางตัวที่มีหน้าจอ UI พิเศษ (เช่น extension ดู preview) โหลดไม่ขึ้น มีสาเหตุคล้ายกันคือปัญหาเครือข่ายหรือ cache เสีย แก้ด้วยวิธีเดียวกับข้างต้นได้

“Error acquiring .NET” — เจอเฉพาะบาง extension ที่ต้องพึ่ง .NET runtime ไม่เกี่ยวกับ Marketplace โดยตรง แต่มักมีสาเหตุร่วมคือปัญหาการเชื่อมต่อเครือข่ายเดียวกัน

คำถามที่พบบ่อย

ทำไม extension ที่ติดตั้งไว้แล้วยังใช้งานได้ปกติ แม้ Marketplace เข้าไม่ได้ เพราะ extension ที่ติดตั้งไปแล้วถูกเก็บไว้ในเครื่องเรียบร้อย ไม่ต้องเชื่อมต่อ Marketplace อีกเพื่อใช้งาน ปัญหานี้กระทบแค่การค้นหา ติดตั้ง หรืออัปเดต extension ใหม่เท่านั้น

ใช้ VS Code แบบ offline ได้ไหม ได้ ฟีเจอร์หลักของ VS Code (แก้โค้ด, debug, terminal ในตัว) ทำงานแบบ offline ได้ปกติทั้งหมด ต้องการอินเทอร์เน็ตเฉพาะตอนติดตั้ง/อัปเดต extension หรือใช้ฟีเจอร์ AI อย่าง Copilot เท่านั้น

ลบ cache แล้วต้องตั้งค่า VS Code ใหม่ทั้งหมดไหม ไม่ต้อง การตั้งค่า (settings.json), keybindings และ extension ที่ติดตั้งไว้แล้วเก็บอยู่คนละที่กับโฟลเดอร์ cache ที่ลบไป ลบ cache กระทบแค่ข้อมูลชั่วคราวที่ VS Code สร้างขึ้นมาเพื่อให้โหลดเร็วขึ้นเท่านั้น

ตั้งค่า proxy แล้วต้อง restart VS Code ไหม ควร restart ทุกครั้งหลังแก้ค่า http.proxy เพื่อให้ VS Code โหลดการตั้งค่าเครือข่ายใหม่ทั้งหมด บางครั้งแค่ปิดเปิด Extensions panel ใหม่ไม่พอ ต้องปิดโปรแกรมทั้งหมดแล้วเปิดใหม่จริงๆ

เช็คได้ไหมว่าปัญหาเกิดจากอะไรกันแน่ก่อนไล่แก้ทีละขั้น เปิด View → Output แล้วเลือก dropdown เป็น “Log (Extension Host)” หรือเปิด Developer Tools ด้วย Help → Toggle Developer Tools แล้วดูแท็บ Console จะเห็นข้อความ error ที่ละเอียดกว่าหน้า Extensions panel มาก เช่น error code เฉพาะของ SSL certificate หรือ timeout ที่บอกโดเมนปลายทางชัดเจน ช่วยให้เลือกวิธีแก้ที่ตรงจุดได้เร็วขึ้นแทนที่จะไล่ลองทุกวิธีตามลำดับตั้งแต่ต้น

ใช้ VS Code Insiders ต่างจากตัวปกติเรื่องนี้ไหม ไม่ต่างกัน ทั้งสองเวอร์ชันเชื่อมต่อ Marketplace ด้วยกลไกเดียวกันทั้งหมด ปัญหาและวิธีแก้ในบทความนี้ใช้ได้กับทั้งคู่ ต่างกันแค่โฟลเดอร์ config ที่แยกกันอยู่คนละที่เท่านั้น ถ้าแก้ปัญหาบนตัวปกติไม่ได้ ลองสลับไปทดสอบบน Insiders ดูก็ช่วยแยกได้ว่าปัญหาเกิดจากเครื่องหรือเกิดจากตัวโปรแกรมเวอร์ชันใดเวอร์ชันหนึ่งโดยเฉพาะ

สรุป

error while fetching extensions เกิดจากปัญหาการเชื่อมต่อไปยัง Marketplace เกือบทุกครั้ง ไล่เช็คตามลำดับนี้

  1. เช็คอินเทอร์เน็ตพื้นฐานก่อน
  2. เช็คและตั้งค่า proxy ให้ถูกต้องถ้าอยู่ในเครือข่ายองค์กร
  3. ปิด VPN ทดสอบชั่วคราว
  4. flush DNS หรือเปลี่ยน DNS server ทดสอบ
  5. ล้าง cache ของ VS Code
  6. เช็คว่า Marketplace ล่มฝั่ง Microsoft เองหรือเปล่า

ถ้าแก้ไม่ได้จริงๆ เพราะข้อจำกัดเครือข่ายที่เปลี่ยนไม่ได้ ยังติดตั้ง extension แบบ manual ผ่านไฟล์ .vsix ได้เสมอ ไม่ต้องพึ่งการเชื่อมต่อ Marketplace เลย และอย่าลืมเช็ค Output log กับ Developer Tools ก่อนไล่ลองทุกวิธีทีละขั้น จะช่วยชี้เป้าสาเหตุที่แท้จริงได้เร็วกว่ามาก

Leave a Comment