برطرف کردن خطای نسخه‌های مختلف مربوط به یک dll که در GAC قرار دارند و باعث بروز خطا در برنامه می‌شود

یکی از مواردی که ممکن است باعث بروز خطا در برنامه شود این است که شما از یک dll که در Global Assembly Cache یا GAC استفاده کرده باشید وحالا نسخه جدیدی از آن dll را روی سیستم نصب کنید ( این dll جدید هم قاعدتا در GAC نصب خواهد شد ).

از آنجا که برنامه هایی که از dll های GAC استفاده می کنند لزومی به اضافه کردن آن dll خاص به برنامه ندارند ، اگر شما پس از نصب نسخه جدید dll ، به روشی که در زیر می آید ، برای برنامه نسخه مورد استفاده را مشخص نکنید به مشکل زیر برخورد می کنید .

Duplicate Dll Sample Error

Duplicate Dll Sample Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0433: The type ‘Microsoft.Reporting.WebForms.ServerReport’ exists in both ‘c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll’ and ‘c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\8.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll’

نمونه ای کامل از خطای وجود یک متد ( کلاس ) در دو نسخه مختلف از یک dll

نمونه ای کامل از خطای وجود یک متد ( کلاس ) در دو نسخه مختلف از یک dll

اگر با خطای بالا و یا خطای مشابهی که برای dll دیگری بوجود آمد مواجه شدید باید در فایل Web.Config برنامه تان تغییرات زیر را اعمال کنید . ( توجه کنید که ممکن است شما قبلا نسه قبلی مورد استفاده را در این فایل مشخص کرده باشید که در این صورت باید شماره نسخه dll را عوض کنید و یا اینکه خط های قبلی راcomment کرده و خط های جدید را اضافه کنید. همچنین پیش از اینکه تغییرات زیر را اعمال کنید حتما کل Temporary Asp File را پاک کنید .

خطوط زیر را اضافه کنید ( توجه کنید که این نمونه مربوط به dll مثال شخصی من هست و شما باید مشخصات dll خودتان را اضافه کنید . )

 <add assembly=Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A/>

<add assembly=Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A/>

 در صورتی که از پیش خطوط نسخه قبل وجود داشت آنها را کامنت کنید . ( برای مثال این خطوط مربوط به dll مثال شخصی من است )

<!–<add assembly=”Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A”/>–>

<!–<add assembly=”Microsoft.Reporting.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”/>–>

در بعضی موارد ممکن است صرفا اضافه کردن خود assembly کافی نباشد و شما از یکسری dependency ها هم استفاده کرده باشید ، در این موارد باید نسخه مربوط به آنها را هم عوض کنید . برای مثال در مورد مثال من ، یکی از موارد خط زیر است

<add path=Reserved.ReportViewerWebControl.axd verb=* type=Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a validate=false/>

همانطور که در بالا ملاحظه می کنید نسخه مورد استفاده 8 است که پس از ارتقا باید به نسخه شماره 9 تبدیل شود و احتیاج به تغییر دیگری نیست ، حتی در نمونه های بالایی هم صرفا تغییر شماره نسخه dll کافی بود که خطوط کامل را صرفا جهت Search بهتر و کاملتر شدن مطلب آوردم.

 نهایتا یکبار دیگر برنامه را اجرا کنید ، باید مشکل حل شده باشد ، در صورت حل نشدن مشکل یک بار از سیستم logoff کرده و مجددا وارد شوید و بعد از آن همه محتویات Temporary Asp.net Files را از مسیر

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

پاک کنید و بعد از آن فایل پروژه را باز کرده و برنامه را اجرا کنید .

One Response to برطرف کردن خطای نسخه‌های مختلف مربوط به یک dll که در GAC قرار دارند و باعث بروز خطا در برنامه می‌شود

  1. سلام دوست عزیز وبلاگ کلاس مجازی فقط و فقط جنبه آموزشی دارد و برای مقاصد آموزشی و ارایه به دانشجویان مطالبی را یا تهیه یا گردآوری می نماید. بنده نیز هر منبعی را گردآوری نمایم با مشخص نمودن محل منبع و آدرس آن در بالای تاپیک مشخص میکنم که در برداشت از وبلاگ شما نیز چنین کاری را کرده ام
    Source: https://hajloo.wordpress.com/2008/11/16/itil-%DA%86%DB%8C%D8%B3
    %D8%AA-%D8%9
    که آدرس کامل صفحه و ذکر سورس در ابتدای آدرس و بدون هیچ گونه دخل و تصرف متاسفانه نمی فهمم کجای اینکار غیر اخلاقی است به هر حال ضمن عذر خواهی از شما که باعث شدم اینگونه برداشت کنید خواهشمندم در صورتی که رضایت از این موضوع ندارید مجددا در اسرع وقت اعلام نمایید که هم مطلب را از وبلاگ بردارم و هم از شما در وبلاگ در محل همان یادداشت عذر خواهی نمایم. ضمنا بنده خودم کپی رایت را نیز تدریس می نمایم و از آن به خوبی آگاه هستمو فقط جهت اطلاع اعلام دارم مقاصد آموزشی با ذکر محل اصلی منبع عین رعایت حق مولف است. و اگر قرار بود برای این متهم به بی اخلاقی شوم من چه گویم که که بسیاری از مقالات و نوشته هایم و بخش اعظم تزم و کتابهایم به صورت عین کپی شده بدون ذکر منبع… موفق باشید

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: