📝 نکته مهم :
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options) { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=.\\SQLEXPRESS;Database=TaskFlowDB;Trusted_Connection=True;TrustServerCertificate=True");
}
}
✅ اگر
ApplicationDbContextرا مانند کدی که در بالا تنظیم کرده باشی (با
OnConfiguring())، دیگر نیازی به appsettings.json و Program.cs برای تعیین رشته اتصال نداری**، زیرا اتصال به دیتابیس مستقیماً در
DbContextتنظیم شده است. 🚨 اما اگر پروژهی شما یک برنامه ASP.NET Core باشد، همچنان به Program.cs نیاز داری تا
ApplicationDbContextرا به **Dependency Injection (DI) اضافه کند. در غیر این صورت، برنامه نمیتواند
DbContextرا مدیریت کند و هنگام اجرا خطا دریافت خواهی کرد. 📌 اگر یک برنامه کنسولی ساده باشد (مثلاً
ConsoleApp)، میتوان بدون Program.cs کار کرد، اما در پروژههای وب و API (مثل ASP.NET Core)، باید Program.cs را داشته باشی تا
DbContextرا در services.AddDbContext<ApplicationDbContext>() ثبت کنی. 🔹 پس اگر فقط در
ApplicationDbContextاتصال را مشخص کرده باشی، نیازی به appsettings.json برای تعیین رشته اتصال نداری**، اما Program.cs برای مدیریت وابستگیها هنوز ضروری است**. اگر قصد داری پروژهای کاملاً بدون appsettings.json و Program.cs اجرا کنی، لطفاً نوع برنامهات را مشخص کن 😊
نکته مهم :
اگر ویژوال استودیو بروز رسانی کردی و خطاهای عجیب دریافت کردی و حتی نمیتوانید از لایه ها استفاده کنید میتوانید از روشهای زیر انجام دهید
برای نصب .NET 8 SDK روی سیستم، میتوانی از [صفحه رسمی دانلود .NET 8]
https://dotnet.microsoft.com/en-us/download/dotnet/8.0
استفاده کنی. در این صفحه، نسخههای مختلف SDK و Runtime برای ویندوز، لینوکس و macOS موجود هستند.
### ✅ مراحل نصب .NET 8 SDK در ویندوز
1️⃣ دانلود .NET 8 SDK
- به [صفحه دانلود .NET 8]
https://dotnet.microsoft.com/en-us/download/dotnet/8.0
برو.
- نسخه SDK 8.0.16 را برای ویندوز انتخاب کن.
- فایل نصبی (
.exe) را دانلود کن. 2️⃣ نصب .NET 8 SDK - فایل دانلودشده را اجرا کن و مراحل نصب را دنبال کن. - مطمئن شو که گزینه "Add to PATH" فعال باشد. 3️⃣ بررسی نصب موفق - پس از نصب، در Command Prompt این دستور را اجرا کن: sh dotnet --list-sdks - باید .NET 8.0.16 در لیست نمایش داده شود. 4️⃣ تنظیم نسخه پیشفرض - اگر همچنان
.NET 9بهصورت پیشفرض اجرا میشود، میتوانی نسخه .NET 8 را بهصورت دستی تنظیم کنی: sh dotnet build --framework net8.0 📌 اگر هنگام نصب مشکلی داشتی، بگو تا راهنمایی کنم! 😊 نصب .NET 8 SDK به درستی انجام شده است، چون در
dotnet --list-sdksدیده میشود (
8.0.410). اما مشکل اینجاست که **دستور
dotnet --versionهنوز
9.0.300را نشان میدهد**، یعنی نسخهی پیشفرض همچنان
.NET 9است. برای حل این مشکل، باید نسخهی .NET 8 را بهعنوان نسخهی پیشفرض تنظیم کنیم: --- ### ✅ ۱. استفاده از نسخهی صحیح هنگام اجرا 🔹 هنگام اجرای
dotnet buildو
dotnet run، بهصورت دستی نسخهی
.NET 8را مشخص کن: sh dotnet build --framework net8.0 dotnet run --framework net8.0 --- ### ✅ ۲. تنظیم نسخهی پیشفرض با global.json 🔹 اگر میخواهی نسخهی
.NET 8بهعنوان پیشفرض در پروژه تنظیم شود، باید یک فایل global.json بسازی: sh dotnet new globaljson --sdk-version 8.0.410 🔹 سپس بررسی کن که نسخهی تنظیمشده درست است: sh dotnet --version 🔹 حالا باید
.NET 8.0.410نمایش داده شود. --- ### ✅ **۳. حذف نسخهی
.NET 9(اختیاری)** 📌 اگر نمیخواهی
.NET 9پیشفرض باشد، میتوانی آن را حذف کنی: sh dotnet uninstall 9.0.300 🚨 این گزینه را فقط اجرا کن اگر نیازی به .NET 9 نداری. --- ### 📌 جمعبندی ✔ **از
dotnet build --framework net8.0برای اجرای پروژه با
.NET 8استفاده کن.** ✔ **یک global.json بساز تا
.NET 8.0.410بهعنوان نسخهی پیشفرض در پروژه تنظیم شود.** ✔ **در صورت نیاز، نسخهی
.NET 9را حذف کن.**
بیا با هم با حوصله بررسی کنیم که SDK 8.0.16، 8.0.410، و global.json دقیقاً چه هستند و چه تفاوتی دارند:
---
### 🧩 ۱. فرق بین
8.0.16و
8.0.410| نسخه SDK | معنی و کاربرد اصلی | |--------------|--------------------------------------------------| |
8.0.16| نسخه معمولی پایدار از .NET 8 – مخصوص سیستمهایی که فقط نسخه SDK را نصب میکنند. این نسخه بیشتر برای توسعه شخصی و عمومی استفاده میشود. | |
8.0.410| نسخه بلندمدت (LTS) برای Visual Studio 2022 – سری 17.10. Microsoft این نسخه را برای هماهنگی با نسخههای مشخصی از ویژوال استودیو منتشر میکند. این SDK دقیقاً همان محتوای
8.0.16را دارد، فقط شماره نگارش بر اساس تقویم تعیین شده است. | 🔹 یعنی **
8.0.410و
8.0.16کاملاً معادل هستند از لحاظ هسته فنی** – فقط شماره نسخه متفاوت است! --- ### 🔧 ۲. دستور
dotnet new globaljson --sdk-version ...چهکار میکند؟ وقتی چند نسخه از .NET روی سیستم نصب باشد، پروژهها ممکن است به نسخه اشتباه اجرا شوند. با دستور
globaljsonمیتوانی تعیین کنی که پروژه دقیقاً از چه نسخهای از SDK استفاده کند. #### 📘 مثال اول: bash dotnet new globaljson --sdk-version 8.0.410 🔹 این دستور یک فایل global.json در پوشه فعلی میسازد با محتوای: json { "sdk": { "version": "8.0.410" } } 🔸 این یعنی: **این پوشه و تمام زیرفولدرهایش از .NET SDK نسخه
8.0.410استفاده میکنند.** #### 📙 مثال دوم: bash dotnet new globaljson --sdk-version 8.0.16 🔹 دقیقاً مثل بالا، فقط عدد نسخه متفاوت است. اگر هر دو نسخه روی سیستم نصب باشند، پروژه با همین نسخه اجرا میشود. ✅ وقتی فایل global.json وجود دارد: - دستور
dotnet buildیا
dotnet runدیگر دنبال نسخه جدیدتر نمیگردد. - پروژه دقیقاً با نسخه مشخصشده اجرا میشود. --- ### 📌 ۳. جمعبندی شیرین: | مورد | توضیح | |---------------------------|-------| |
8.0.16و
8.0.410| هسته مشابه دارند، فقط برای نسخههای متفاوت ویژوال استودیو ارائه شدهاند. انتخاب هرکدام مشکلی ایجاد نمیکند. | |
dotnet new globaljson| برای قفل کردن نسخه SDK پروژه در مسیر خاصی استفاده میشود. | | وجود global.json | جلوی استفاده ناخواسته از نسخههای جدیدتر یا ناسازگار SDK را میگیرد. | | اگر نسخه مشخصشده نصب نشده باشد | خطا میگیری:
The specified SDK version could not be found. | --- اگر دوست داشتی من میتونم برات فایل global.json بسازم، پروژهتو تنظیم کنم، یا از اینجا مستقیم یه ساختار پروژه حرفهای راه بندازم ✨ فقط بگو! 😊
MyShop (9).zip
حجم:
40.5M
پروژه ادامه درس باگتو است تا جایی که میشود بخص هایی که درس نداده به پروژه آوردم یک فروشگاه کامل که سبد خرید و تست بانک ندارد چند ماه در روز تعطیلی وقتم را گذراندم در ادامه درس باگتو همه موارد درس سبد خرید توضیح داده و تست بانک هم در پروژه Test_Store دارم
gallery.zip
حجم:
13.4M
گالری چند تصویر برای فروشگاه که از پروژه جدا کردم
Lang.zip
حجم:
18.5M
پروژه دو زبان فارسی و انگلیسی که زبان از طریق کوکی ذخیره می شود
6.4M حجم رسانه بالاست
مشاهده در ایتا
آموزش ایجاد جدول فایل Resource.resx یادت باشد برای نام گذاری Views.Home.Index.en و پوشه Resources که به صورت زیر باشد
Resources/Views.{Controller}.{View}.{culture}.resx
اگر در نام گذاری اشتباه باشد نمیتوانید پروژه را چند زبان قرار دهید
توی پروژههای چندزبانه مثل اون چیزی که داری با ASP.NET Core MVC میسازی، Culture به معنی فرهنگ یا زبان-کشور کاربره. دقیقتر بگم:
✅ تعریف Culture در برنامهنویسی
🔹 Culture یعنی مجموعهای از تنظیمات مرتبط با زبان، کشور و فرمتهای محلی، مثل:
| مورد | نمونه مقدار |
| زبان | en یا fa |
| کشور | US, IR |
| تاریخ | MM/dd/yyyy یا yyyy/MM/dd |
| اعداد | 1,000.50 یا ۱٬۰۰۰٫۵۰ |
| واحد پول | $, ﷼ |
مثلاً:
- "en-US" = انگلیسی - آمریکا
- "fa-IR" = فارسی - ایران
در ASP.NET Core، اینها با کلاس CultureInfo مدیریت میشن.
✅ تفاوت Culture و UICulture
| مورد | نقش |
| Culture | فرمتهای محلی مثل اعداد، تاریخ |
| UICulture | زبان واسط کاربر (مترجم فایلهای .resx) |
معمولاً برای سایتی که زبان و نمایش هم مهمه، هر دو تنظیم میشن:
Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fa-IR");
🎯 کاربرد در پروژه تو
- با تنظیم Culture، مثلاً تاریخها در فرم تماس بهشکل ۱۴۰۴/۰۴/۱۳ نمایش داده میشن.
- با تنظیم UICulture، ترجمه از فایلهای .resx انجام میشه (مثل ارتباط با ما به جای Contact Us).
در پروژههای چندزبانه ASP.NET Core MVC، نامگذاری فایلهای .resx بسیار مهمه تا سیستم بتونه ترجمهی درست رو برای View یا کلاس مربوطه تشخیص بده. بیا با هم ساختار حرفهای و دقیقش رو یاد بگیریم:
✅ انواع Resource و الگوی نامگذاری
1. فایلهای مخصوص Viewها (View-specific Resources)
برای ترجمه Viewها باید فایلها رو طبق این الگو نامگذاری کنی:
Resources/Views.{Controller}.{View}.{culture}.resx
مثالها:
| View | زبان فارسی | زبان انگلیسی |
| Index.cshtml | Views.Home.Index.fa.resx | Views.Home.Index.en.resx |
| Contact.cshtml | Views.Home.Contact.fa.resx | Views.Home.Contact.en.resx |
حتماً پوشه Resources رو در ریشهی پروژه قرار بده، نه داخل Views
2. فایلهای عمومی (Shared Resources)
برای ترجمههایی که بین چند View یا کنترلر مشترکه، فایلهایی مثل زیر بساز:
Resources/SharedResources.fa.resx
Resources/SharedResources.en.resx
در Program.cs باید از IStringLocalizer<SharedResources> استفاده کنی تا این فایلها خونده بشن.
3. فایلهای ترجمه برای کلاسها یا مدلها
اگر بخوای اعتبارسنجی یا متون سیستم رو ترجمهپذیر کنی، فایلها باید با اسم کامل کلاس باشن:
مثلاً برای کلاس ContactModel.cs:
Resources/Models.ContactModel.fa.resx
Resources/Models.ContactModel.en.resx
البته برای این مورد از IStringLocalizer<ContactModel> استفاده میکنی.
🧠 نکته تکمیلی
در Program.cs باید این تنظیم باشه تا مسیر Resourceها درست شناسایی بشه:
builder.Services.AddLocalization(options =>
{
options.ResourcesPath = "Resources";
});
در ادامه، ساختار کامل پروژهمون با معماری ASP.NET Core 8 MVC، دوزبانه، فرم ارتباط با ما، نمایش نتایج فرم، و تم دارک/لایت/سیستم رو برات مینویسم. این ساختار تمیز و قابل توسعهست که بتونی راحت مدیریت کنی.
---
🧱 ساختار پوشهها و فایلها
MyLangProject/ ├── Controllers/ │ └── HomeController.cs ├── Views/ │ └── Home/ │ ├── Index.cshtml │ ├── Contact.cshtml │ └── Result.cshtml │ └── Shared/ │ └── _Layout.cshtml ├── Resources/ │ ├── Views.Home.Index.en.resx │ ├── Views.Home.Index.fa.resx │ ├── Views.Home.Contact.en.resx │ ├── Views.Home.Contact.fa.resx │ ├── Views.Home.Result.en.resx │ ├── Views.Home.Result.fa.resx │ └── Views.Shared._Layout.en.resx │ └── Views.Shared._Layout.fa.resx ├── wwwroot/ │ ├── css/ │ │ └── site.css │ └── js/ │ └── theme.js ├── Program.cs └── appsettings.json--- 💬 خلاصه نقش هر بخش فایل / پوشه توضیح کاربرد Controllers/HomeController.cs اکشنهای مربوط به صفحات، فرم ارتباط و تغییر زبان Views/Home/*.cshtml صفحه اصلی، فرم ارتباط، و صفحه نمایش نتایج فرم Views/Shared/_Layout.cshtml قالب مشترک صفحات شامل منو، Dropdown زبان و تم، و <title> چندزبانه Resources/*.resx ترجمههای متنهای ثابت برای هر View و Layout wwwroot/css/site.css استایلهای تم دارک / لایت wwwroot/js/theme.js کد JavaScript برای تشخیص تم مرورگر، انتخاب دستی تم، و ذخیره در کوکی Program.cs تنظیمات پروژه، localization، مسیریابی، و middleware appsettings.json تنظیمات عمومی پروژه (مثلاً پیکربندیها و اتصالها در صورت نیاز)