این سایت برای ie9 طراحی نشده است

لطفا دستگاه خود را بچرخانید.

کاربرد CSScript

۱۴ تیر ۱۳۹۵ نگین ربیعی
بدون دیدگاه

ابتدا میخواستیم کد crawler سایت دایره را بصورت سرویس دربیاریم (وظیفه crawler سایت دایره گرفتن اطلاعات تخفیف سایت های تخفیفیه) .قبل از این ، کدهای گرفتن صفحات تخفیف هر سایت،کلاسهایی بودند که در داخل پروژه تعریف شده بود . برای به سرویس در آوردن این پروژه بمنظور جلوگیری از دست بردن داخل کد ها (چون سایتهای تخفیفی متغیره و امکان حذف و اضافه اونها وجود داره) و ما میخواستیم در سرویسمون کدهایی رو بذاریم که ثابت باشه و با اضافه و حذف شدن این سایت ها مجبور نباشیم سرویس را با هر تغییر uninstall و دوباره install کنیم ، نیاز داشتیم که کدهای گرفتن صفحات هر سایت تخفیف رو خارج از این سرویس بذاریم.

پس اونارو در قالب کلاس در فولدر  bin  پروژه قرار دادیم تا از اونجا خونده بشه .

نیاز داشتیم که از طریق Reflection  این کلاس ها رو خارج از پروژمون بخونیم و load کنیم . برای این منظور از CSScript استفاده کردیم .

CSScript  یک( CLR (Common Language Runtime ست و ما با استفاده از این library میتونیم کدهای خارج از پروژمون رو  بصورت Load، RunTime  کنیم .

ناگت CS-Script Class Library را میتونید از اینجا دانلود کنید .

StreamReader sr = new StreamReader(AppDomain.CurrentDomain.BaseDirectory+"Extractors\\"+p.Name+"Extractor.cs");

 dynamic code = CSScriptLibrary.CSScript.Evaluator.LoadCode(sr.ReadToEnd());

 

کد بالا اول کلاسمون رو از طریق StreamReader با دادن آدرس محل کلاسمون میگیریم و بعد با استفاده از CSScript  کدمون رو load میکنیم .از متغیر code میتوانیم مقادیر داخل اون رو بگیریم .مثلا:

      List<Provider> n = code.Provider;

 

 

با run کردن کد بالا error میگیریم که namespace هایی از کلاسمون چندین بار استفاده شده ، علت رخ دادن این error  استفاده چندباره از namespace ، System ست .

چون خود CSScript  از System استفاده میکنه این Error رخ میده . برای رفع این مشکل باید  :using System رو  کامنت کرده و  namespace ها رو بصورت inline و بدون  using استفاده کنیم .

نکته دیگه ای که باید بهش توجه کنیم اینه که اگه در متدهای کلاسمون از متغیر هم نام استفاده کردیم باز هم با error روبرو میشیم ، پس باید نام متغیرهای هم ناممونم  تغییر بدیم .