باگ های پرتکرار در IDisposable
استفاده از nosdb در دات نت
مدیریت رجیستری در #C
انتخاب الگوریتمهای هش سریع
این هشها برای کارهای امن استفاده نمیشوند و صرفا کاربردهایی جهت تولید بانکهای اطلاعاتی فوق سریع (key/value stores)، سیستمها کش (تولید سریع کلید منحصربفرد) و یا جاهائیکه کارآیی بسیار مهم است، دارند. البته به نظر در حال حاضر xxHash از تمام اینها سریعتر است. یک نمونه پیاده سازی xxHash سریع در دات نت.
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
سؤال: first chance exception چیست؟
وقتی استثنایی در یک برنامه رخ میدهد، به آن یک first chance exception میگویند. این اولین شانسی است که سیستم به شما میدهد تا استثنای رخ داده را مدیریت کنید. اگر کدهای برنامه یا ابزاری (یک try/catch یا دیباگر) این اولین شانس را ندید بگیرند، یک second chance exception رخ میدهد. اینجا است که برنامه به احتمال زیاد خاتمه خواهد یافت.
مشاهدهی پیامهای A first chance exception در پنجرهی output ویژوال استودیو به این معنا است که استثنایی رخ داده، اما توسط یک استثناءگردان مدیریت شدهاست. بنابراین در اکثر موارد، موضوع خاصی نیست و میتوان از آن صرفنظر کرد.
سؤال: چگونه میتوان منشاء اصلی پیام رخدادن یک first chance exception را یافت؟
ویژوال استودیو در پنجرهی output، مدام پیام رخدادن first chance exception را نمایش میدهد؛ اما واقعا کدام قطعه از کدهای برنامه سبب بروز آن شدهاند؟ به صورت پیش فرض صفحهی نمایش استثناءها در VS.NET زمانی نمایان میشود که استثنای رخ داده، مدیریت نشده باشد. برای فعال سازی نمایش استثناهای مدیریت شده باید تنظیمات ذیل را اعمال کرد:
- به منوی Debug | Exceptions مراجعه کنید.
- گره Common Language Runtime Exceptions را باز کنید.
- سپس گروه System آنرا نیز باز کنید.
- در اینجا بر اساس نوع استثنایی که در پنجرهی output نمایش داده میشود، آن استثناء را یافته و Thrown آنرا انتخاب کنید.
اینبار اگر برنامه را اجرا کنید، دقیقا محلی که سبب بروز استثنای ArgumentOutOfRangeException شده در VS.NET گزارش داده خواهد شد.
معرفی کتابخانهی DNTCaptcha.Core
در نگارشهای اخیر داتنت، NET CLI. به همراه تغییرات قابل توجهی بودهاست که در این مطلب و نظرات آن، موارد مهم این تغییرات را بررسی خواهیم کرد.
console logger بهبود یافتهی داتنت 8
یکی از تغییرات بسیار جالب توجه و مفید NET CLI. در داتنت 8، امکان دسترسی به خروجی لاگهای ساختار یافتهی اعمال خط فرمان آن است:
اگر پروژهی خود را با استفاده از دستور dotnet build، کامپایل میکنید، خروجی پیشفرض این دستور خط فرمان، کلی و بدون ارائهی جزئیات است؛ اما میتوان آنرا در داتنت 8، به شکل تصویر فوق، تغییر داد و به این مزایا رسید:
- امکان مشاهدهی زمان کامپایل هر قسمت به صورت جداگانه
- امکان مشاهدهی پویای درصد انجام عملیات
- امکان مشاهدهی جزئیات کامپایل هر target framework به صورت مجزا
- دسترسی به یک خروجی رنگی و زیباتر
این خروجی را که به صورت پیشفرض فعال نیست، میتوان به دو صورت:
الف) سراسری و با اجرای دستور PowerShell زیر:
[Environment]::SetEnvironmentVariable("MSBUILDTERMINALLOGGER", "auto", "User")
که متغیر محیطی MSBUILDTERMINALLOGGER را به auto تنظیم میکند،
ب) و یا با استفاده از سوئیچ tl-- به ازای هر دستور dotnet build، به صورت جداگانهای فعال کرد:
dotnet build --tl
یک نکته: این قابلیت جالب و مهم، در دات نت 9، به صورت پیشفرض فعال است و نیازی به تنظیم خاصی ندارد.
routes.MapRoute( "SiteMap_route", // Route name "sitemap.xml", // URL with parameters new { controller = "Sitemap", action = "index", name = UrlParameter.Optional, area = "" } // Parameter defaults );
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( "SiteMap_route", // Route name "sitemap.xml", // URL with parameters new { controller = "Sitemap", action = "index", name = UrlParameter.Optional, area = "" } // Parameter defaults ); }
برای این منظور میتوان از افزونهای به نام RouteDebug نوشته یکی از اعضای سابق تیم ASP.NET MVC استفاده کرد:
کار کردن با آن نیز بسیار ساده است.
الف) ارجاعی را به اسمبلی RouteDebug.dll (حاصل از کامپایل پروژه فوق) به پروژه جاری ASP.NET MVC خود اضافه کنید.
ب) سپس به فایل Global.asax.cs خود مراجعه و در سطر آخر متد Application_Start آن، فراخوانی ذیل را اضافه نمائید:
RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
نکته مهمی که در این تصویر باید به آن دقت داشت، اولین True سبز رنگی است که نمایش میدهد. یعنی اولین مسیریابی که کار هدایت و نمایش صفحه جاری را برعهده دارد. در اجرای عادی ASP.NET MVC، همینجا کار پردازش سیستم مسیریابی صفحه جاری خاتمه خواهد یافت و نوبت به سایرین نخواهد رسید.
در مورد صفحه sitemap.xml چطور؟ اگر این آدرس را در مرورگر، بدون فعال سازی افزونه RouteDebug وارد کنیم، پیام 404 را دریافت میکنیم. اگر افزونه را فعال کنیم، اینبار به صفحه زیر خواهیم رسید:
بله. همانطور که مشاهده میکنید، مسیریابی پیش فرض، اینبار نیز برنده بوده است و اولین تطابق صورت گرفته با آن صورت میگیرد. بنابراین اصلا کار به استفاده از مسیریابی سفارشی تعریف شده توسط ما نخواهد رسید.
بنابراین محل تعریف این مسیریابی را اکنون به پیش از مسیریابی پیش فرض انتقال میدهیم:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "SiteMap_route", // Route name "sitemap.xml", // URL with parameters new { controller = "Sitemap", action = "index", name = UrlParameter.Optional, area = "" } // Parameter defaults ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
بله. با این تنظیم صورت گرفته، اینبار دیگر سیستم مسیریابی، برای تفسیر مسیر سفارشی تعریف شده، به سراغ مسیریابی پیش فرض نخواهد رفت و کار همینجا خاتمه مییابد.
سؤال: آیا اینکار تداخلی در عملکرد اصلی برنامه ایجاد نمیکند؟ مثلا اگر به مسیر index کنترلر home مراجعه کنیم، مشکلی نخواهد بود؟
پاسخ: خیر. برای آزمایش آن باز هم به افزونه RouteDebug مراجعه خواهیم کرد:
همانطور که مشخص است، مسیریابی برنده در این حالت، همان مسیریابی پیش فرض است و نه مسیریابی سفارشی آدرس خاص sitemap.xml سایت.
یک نکته تکمیلی
افزونه گلیمپس نیز امکان دیباگ Routeها را دارد؛ اما توانایی بررسی مشکلات Routing یک خطای 404 مانند مثال فوق را حداقل تا زمان نگارش این مطلب ندارد و همان افزونه RouteDebug یاد شده، بهتر عمل میکند.