پست

خطا Unable to find package بدون هیچی تغییر در زمان بیلد پروژه

اگه سیستم خودتون رو یه روز خاموش کرده باشید و رفته باشید خونه، و روز بعد که اومدید ببینید پروژه NET Core. شما بیلد نمی‌شه و خطایی مشابه زیر رو می‌ده، این پست برای شماست:

1
2
3
4
5
6
7
error NU1102:
Unable to find package Microsoft.NETCore.App.Ref with version (= 8.0.30)
- Found 192 version(s) in Public [ Nearest version: 9.0.0-preview.1.24080.9 ]

error NU1102:
Unable to find package Microsoft.AspNetCore.App.Ref with version (= 8.0.30)
- Found 193 version(s) in Public [ Nearest version: 9.0.0-preview.1.24081.5 ]

به‌جای پکیج فوق ممکنه پکیج دیگه‌ای باشه. تشابه این خطاها این هست که بدون هیچ کاری از سمت شما ظاهر می‌شن و حتی با پاک کردن کش نوگت سیستم و پوشه‌های bin/obj پروژه هم برطرف نمی‌شن.

دلیل این خطا، آپدیت خودکار ویندوز هست؛ چیزی که ممکنه بیشتر وقت‌ها بهش توجه نکنیم که دقیقاً چی رو نصب می‌کنه. فرض کنید روی سیستم خودتون این ورژن‌ها از .NET Core رو داشته باشید:

1
2
3
4
5
6
> dotnet --list-sdks
6.0.428 [C:\Program Files\dotnet\sdk]
8.0.206 [C:\Program Files\dotnet\sdk]
8.0.400 [C:\Program Files\dotnet\sdk]
9.0.205 [C:\Program Files\dotnet\sdk]
10.0.109 [C:\Program Files\dotnet\sdk]

و پیامی در ویندوز می‌گیرید که یه پچ امنیتی آماده نصبه و شما هم اون رو تایید می‌کنید تا ورژن 10.0.111 از .NET Core نصب بشه.

دقیقاً این‌جاست که مشکل پیش می‌آد. اگه فایل global.json برای پروژه نداشته باشید، به‌صورت پیش‌فرض آخرین ورژن نصب‌شده روی سیستم استفاده می‌شه و پروژه‌ای که از .NET Core ورژن ۸ استفاده می‌کرد، با همین آخرین ورژن بیلد می‌شه.

این‌جا این حالت ممکنه پیش بیاد: به‌خاطر باگی در ورژن تازه منتشرشده، ورژن اشتباهی از یه کتابخونه - که این‌جا Microsoft.NETCore.App.Ref بود - برای پروژه خواسته می‌شه و چون این ورژن وجود نداره، بیلد با خطا مواجه می‌شید.

راه‌حل این هست که یا اون ورژن رو از سیستم پاک کنید تا مشکل برطرف بشه، یا فایل global.json رو به پروژه اضافه کنید تا همیشه با یه نسخه‌ی مشخص بیلد بشه:

1
2
3
4
5
6
{
  "sdk": {
    "version": "8.0.400",
    "rollForward": "latestPatch"
  }
}