เทคโนโลยี

Fix error id must be a valid path component (Parameter id)

แก้ error maui เมื่อสร้างโปรเจ็กใหม่

ปรับปรุงล่าสุด 28/10/2569
Fix error id must be a valid path component (Parameter id)

ลองหาใน ChatGPT แก้หลายรอบยังไม่ได้ ต้องให้ Codex แก้ให้ แป๊ปเดียว ได้เลย

C:\Program Files\dotnet\sdk\10.0.403\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(120,5): error MSB4018:
  The "ProcessFrameworkReferences" task failed unexpectedly.
  System.ArgumentException: 'id' must be a valid path component (Parameter 'id')
     at Microsoft.NET.Build.Tasks.ProcessFrameworkReferences.GetResolvedPackVersion(String packID, String packVersion)
     at Microsoft.NET.Build.Tasks.ProcessFrameworkReferences.AddPacksForFrameworkReferences(List`1 packagesToDownload, L
  ist`1 runtimeFrameworks, List`1 targetingPacks, List`1 runtimePacks, List`1 unavailableRuntimePacks, List`1& knownRunt
  imePacksForTargetFramework)
     at Microsoft.NET.Build.Tasks.ProcessFrameworkReferences.ExecuteCore()
     at Microsoft.NET.Build.Tasks.TaskBase.Execute()
     at Microsoft.Build.BackEnd.TaskExecutionHost.Execute()
     at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(TaskExecutionHost taskExecutionHost, TaskLoggingCont
  ext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask)
Restore failed.
Post action failed.
Manual instructions: Run 'dotnet restore'

Codex บอกว่า

TargetingPackName = Microsoft.Android.Ref.36.

จุดท้าย 36. ทำให้เกิด ‘id’ must be a valid path component ผมตรวจโค้ด Android SDK และทดสอบแล้ว พบว่าการตัดข้อความเมื่อใช้ culture ภาษาไทย (th-TH) ให้ผลผิดแบบเดียวกัน

ให้รันใน PowerShell หน้าต่างเดียวกันตามนี้ เพื่อเปลี่ยนระบบเปรียบเทียบข้อความของ .NET เป็น Windows NLS ชั่วคราว:

$env:DOTNET_SYSTEM_GLOBALIZATION_USENLS = "1"

dotnet restore

แก้แบบถาวร

บันทึกค่าไว้ระดับผู้ใช้ได้เลย รันครั้งเดียวใน PowerShell ไม่ต้องเปิดแบบ Administrator:

[Environment]::SetEnvironmentVariable(
    "DOTNET_SYSTEM_GLOBALIZATION_USENLS",
    "1",
    "User"
)

$env:DOTNET_SYSTEM_GLOBALIZATION_USENLS = "1"

จากนั้นปิด Windows Terminal, VS Code และ Visual Studio ทั้งโปรแกรม แล้วเปิดใหม่ เพื่อรับค่า หากยังไม่รับค่า ให้ออกจากระบบ Windows แล้วเข้าใหม่

ตรวจสอบใน PowerShell หน้าต่างใหม่:

$env:DOTNET_SYSTEM_GLOBALIZATION_USENLS
เขียนโดย KanexKane

นักเขียนโค้ด นักเก็บเรื่องราว และนักทดสอบ ชอบแบ่งปันสิ่งเล็ก ๆ ที่ทำให้วันธรรมดาพิเศษขึ้น

รู้จักกันอีกนิด →