مقدمة: الغريب المألوف من مجلد bin
\n\nتقوم بتشغيل مشروعك بلغة C#، وتحتسي قهوتك، وتتوقع نشرًا ناجحًا آخر، وفجأة - بام! - يظهر في السجلات أو المتصفح نص أحمر مخيف: Could not find a part of the path '...\\bin\\roslyn\\csc.exe'. هل هذا مألوف؟ إذا واجهت خطأ csc.exe مرة واحدة على الأقل، فأنت تعلم: هذه ليست مجرد "شيء ما تعطل"، بل قصة كاملة حول كيفية قيام .NET بتجميع الكود الخاص بك أثناء التشغيل.
في الواقع، وراء هذا الخطأ ليس قدرًا شريرًا، بل تفاصيل تقنية عادية. دعنا نفهم لماذا يختفي bin\\roslyn\\csc.exe فجأة وكيف نتعامل معه بشكل نهائي. ستكون المقالة مفيدة لكل من المبتدئين الذين يرون هذا الخطأ لأول مرة في ASP.NET، والمطورين ذوي الخبرة الذين سئموا من إصلاحه يدويًا.
\n\nما هو هذا csc.exe الغامض وما فائدته؟
\n\nقبل أن نخوض في المعركة، دعنا نفهم النظرية. Csc.exe هو مترجم C# من .NET Framework. في السابق، كان موجودًا في مكان ما داخل النظام، ولكن مع ظهور Roslyn (منصة المترجمات مفتوحة المصدر من Microsoft)، تغير كل شيء. الآن في مشاريع ASP.NET (خاصة القديمة على .NET Framework)، يتم استخدام حزمة Microsoft.CodeDom.Providers.DotNetCompilerPlatform. تقوم هذه الحزمة بنسخ إصدارات جديدة من المترجم مباشرة إلى مجلد مشروعك - إلى bin\\roslyn\\csc.exe.
لماذا؟ لكي يتمكن الموقع من تجميع كود C# مباشرة على الخادم (على سبيل المثال، لطرق العرض الديناميكية Razor). إذا كان هذا الملف مفقودًا أو تالفًا أو لم يتم نسخه - فستحصل على خطأ المسار إلى csc.exe.
\n\nأهم 5 أسباب للخطأ وكيفية إصلاحها
\n\n1. "القمامة" في مجلدات bin و obj (السبب الأكثر شيوعًا)
\n\nالسيناريو الأكثر شيوعًا: قمت بتحديث الحزم، أو تغيير إصدار .NET، أو ببساطة أصبح المشروع "مليئًا" بالتجميعات القديمة. تخزن المجلدات bin و obj ذاكرة التخزين المؤقت للتجميع، وإذا بقيت فيها مراجع تالفة لإصدارات قديمة من Roslyn - مرحبًا، الخطأ.
الحل: قم بتنظيف المشروع بالكامل.
\n\n// أغلق Visual Studio\n// احذف يدويًا مجلدات bin و obj في جميع أنحاء الحل\n// أو استخدم وحدة تحكم مدير الحزم:\nUpdate-Package –reinstall Microsoft.CodeDom.Providers.DotNetCompilerPlatform\n\n\nبعد ذلك، أعد بناء المشروع (Build → Rebuild Solution). سيقوم النظام بنسخ csc.exe من حزمة NuGet مرة أخرى إلى المجلد المناسب.
\n\n2. تعارض إصدارات حزم NuGet
\n\nأحيانًا تقوم بتحديث Microsoft.CodeDom.Providers.DotNetCompilerPlatform عن طريق الخطأ إلى إصدار غير متوافق مع مشروعك. أو العكس، الحزمة القديمة لا تجد Roslyn الجديد.
\n\nالحل: أعد تثبيت الحزمة بالقوة.
\n\n// في وحدة تحكم مدير الحزم (Tools → NuGet Package Manager → Package Manager Console)\nUninstall-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Force\nInstall-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform\n\n\nلاحظ: إذا كان مشروعك يستخدم .NET Framework 4.7.2 أو أقل، فمن الأفضل تثبيت إصدار الحزمة 2.0.1 (الإصدارات الأحدث قد تتطلب .NET 4.8+).
3. web.config تالف أو تعديلات يدوية
\n\nفي ملف web.config يوجد قسم <system.codedom> يحدد المترجم الذي سيتم استخدامه. إذا قمت أنت (أو أي إضافة) بحذف هذا القسم أو تغييره عن طريق الخطأ - سيتوقف bin\\roslyn\\csc.exe عن العمل.
الحل: تحقق من web.config. التكوين الصحيح يبدو كالتالي:
\n\n<system.codedom>\n <compilers>\n <compiler language="c#;cs;csharp" extension=".cs"\n type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Vers