c# - خطأ غريب ترقية ASP.NET MVC من 4 إلى 5




asp.net-mvc asp.net-mvc-4 (2)

أقوم بتحويل مشروعي من MVC 4 إلى MVC 5 (و .Net 4 إلى .Net 4.5.2 ، وهو المحرك الحقيقي للتغييرات.)

عندما أقوم بتشغيل إحدى صفحاتي ، أتلقى هذا الخطأ (أضيفت مساحة فارغة بواسطتي لتسهيل القراءة)

[A] System.Web.WebPages.Razor.Configuration.HostSection لا يمكن إرسالها إلى [B] System.Web.WebPages.Razor.Configuration.HostSection.

النوع A ينشأ من 'System.Web.WebPages.Razor ، الإصدار = 1.0.0.0 ، الثقافة = محايدة ، PublicKeyToken = 31bf3856ad364e35' في السياق 'الافتراضي' في الموقع 'C: \ windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll.

النوع ب ينشأ من 'System.Web.WebPages.Razor ، الإصدار = 3.0.0.0 ، الثقافة = محايدة ، PublicKeyToken = 31bf3856ad364e35' في السياق 'الافتراضي' في الموقع 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ ملفات ASP.NET المؤقتة \ studentportal3g \ 2204bad2 \ aece9b3b \ assembly \ dl3 \ ad80387c \ 91adbf51_fc73d101 \ System.Web.WebPages.Razor.dll '.

عندما رأيت هذا للمرة الأولى ، من السهل آه! ليس كثيرا :)

لقد تخطيت كل مشروع وتأكدت من ترقية الإصدار إلى MVC 5 الذي يحتوي على الإصدار 3.0.0.0 من System.Web.WebPages.Razor.dll.

إعادة بناء نظيفة ، لا يزال الحصول على الخطأ. لا مشكلة ، سأحذف الملفات المؤقتة المخزنة مؤقتًا.

إعادة بناء نظيفة ، لا يزال الحصول على المشكلة. أعود ، تحقق يدويًا من كل إصدار من System.Web.WebPages.Razor.dll ، في مراجع كل مشروع يحتوي على مرجع إليه. أتحقق من مجلدي حيث أقوم بنسخ dlls للإشارة إليها يدويًا ، وليس هناك.

إذا لم يكن الحل الخاص بي يحتوي على نسخة من DLL أو مرجع إلى DLL ، وقمت يدويًا بحذف مجلدات ذاكرة التخزين المؤقت في 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET

ملفات \ studentportal3g ...

أين هو دلل سيئة القديمة قادمة من؟ كيف يمكنني إصلاح هذا الخطأ؟ كيف يمكنني منع حدوث ذلك مرة أخرى؟

شكر،

Eric-


يبدو أن DLL القديم في ذاكرة التخزين المؤقتة للتجميع العمومي (GAC). تعد GAC مكانًا يمكنك من خلاله تخزين التجميعات التي يمكن الرجوع إليها من العديد من التطبيقات على الجهاز. انقر هنا لقراءة المزيد حول GAC.

استخدم أداة gacutil لتحديث التجميع في GAC.

توجد الأداة في مكان ما ضمن مجلد "Microsoft SDKs" في ملفات البرامج. بالنسبة لي ، كان يقع في

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.1 Tools \

افتح cmd وانتقل إلى المكان الذي قمت بتخزين gacutil به. ثم استخدمها مثل هذا:

gacutil.exe -i [path to your assebly] -f .

المعلمة -i للإشارة إلى مكان التجميع. يتم استخدام المعلمة -f لفرض تحديث التجميع ، إذا كان بالفعل هناك.

مثال

قل DLL موجود في

C: \ مؤقت \ System.Web.WebPages.Razor.dll

ثم يمكنك تشغيل gacutil.exe -i "C:\temp\System.Web.WebPages.Razor.dll" -f


يعد Visual Studio أداة رائعة ، ولكنه لا يتخذ دائمًا الخيارات الصحيحة عندما يتعلق الأمر بترقية التبعيات ، كما أنه لا يدعم كل خيار ممكن متاح في MSBuild. كلما وجدت نفسك في مأزق مثل هذا ، يجب عليك مراجعة و (إذا لزم الأمر) يدويًا وتحرير ملفك .csproj لحله.

لا تكمن المشكلة في أن الملف الخاص بك موجود في GAC أو أنه لم يتم تثبيته بواسطة NuGet ، فالمشكلة على الأرجح هي أن أحد ملفات المشروع لديك لا يزال لديه إشارة إلى الإصدار القديم من System.Web.WebPages.Razor version 1.0.0.0 ، وتحتاج إلى العثور على جميع المراجع إليها وتغييرها إلى 3.0.0.0 وفقًا لذلك.

  1. انقر بزر الماوس الأيمن على عقدة المشروع في Solution Explorer وانقر فوق Unload Project .
  2. انقر بزر الماوس الأيمن فوق عقدة المشروع مرة أخرى وانقر فوق Edit <projectName>.csproj .
  3. ابحث في الملف عن المراجع إلى System.Web.WebPages.Razor وقم بتحديث الإصدار و HintPath وفقًا لذلك (كما هو موضح أدناه). تأكد من أن HintPath الذي تستخدمه يشير فعليًا إلى ملف موجود.
  4. كرر هذه الخطوات لكافة المشاريع التابعة في الحل (وأيها في مكتبات الارتباط الحيوي (DLL) التي ليست جزءًا من الحل).

المرجع القديم

<Reference Include="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    <Private>True</Private>        
    <HintPath>..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.WebPages.Razor.dll</HintPath>
</Reference>

تحديث المرجع

<Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
</Reference>

يجب عليك أيضًا /Views/web.config ملفات web.config و /Views/web.config للتأكد من أنها لا تشير إلى أي إصدارات قديمة من هذا التجميع.

ملاحظة: إذا لم تحل الإرشادات المذكورة أعلاه مشكلتك ، فمن المحتمل أن تكون المشكلة خارج الحل. على الأرجح توجد مكتبة تابعة لجهة خارجية تشير إلى الإصدار القديم من الملف في مكان ما. إذا كان الأمر كذلك ، فقد تحاول الحصول على إصدار محدث من DLL.

قد ترغب أيضًا في التحقق من هذا السؤال .





asp.net-mvc-5