نظرات مطالب
EF Code First #1
با سلام و خسته نباشید. امید است این سری مطالب هم مانند مطالب MVC فراتر از مقالات و کتب موجود باشد.
سه سوال:
1- چطور می توان با Code First برخی از موارد ابتدایی ایجاد بانک مانند Collation و Compatibility Level و Schema و User و Role را به DBMS ارسال کرد.
2- اگر از پروایدرهای دیگر مثلا برای MySQL یا Oracle استفاده شود، آیا Code First قادر است بدون هیچ تغییری نسبت به SQL Server کد را به بانکهای دیگر نگاشت کند؟ در مورد بانک های NOSQL چطور؟
3- آیا اگر این پروژه Code First را در یک هاست اشتراکی Deploy کنیم و در آن هاست برنامه Start شود (مثلا یک پروژه MVC)، آیا پروژه قادر خواهد بود به طور خودکار بانک را تولید نماید و دیگر نخواهیم بصورت دستی بانک و یوزر را در کنترل پنل هاست تعریف کنیم.
مطالب
لینک‌های هفته آخر آبان

وبلاگ‌ها و سایت‌های ایرانی


Visual Studio


ASP. Net


طراحی وب


اس‌کیوال سرور


به روز رسانی‌ها


سی‌شارپ


عمومی دات نت


PHP


ویندوز


گوگل


متفرقه




مطالب
اهمیت ارائه‌ی برنامه‌های دات نت به صورت release

یکی از مواردی که بعضی از همکاران هنگام ارائه برنامه‌های خود رعایت نمی‌کنند، تفاوت قائل نشدن بین حالت release و debug در زمان کامپایل پروژه، برای ارائه نهایی است.
هنگام استفاده از حالت release ، گزینه‌های بهینه سازی کامپایلر فعال شده و همچنین debug symbols از اسمبلی نهایی تولید شده حذف می‌گردد (بنابراین حجم اسمبلی نهایی نیز کمتر خواهد شد). لازم به ذکر است در حالت release ، میزان مصرف حافظه برنامه تولید شده نیز کمتر از حالت debug خواهد بود. گاهی از اوقات سرعت اجرای این دو حالت تا چندین برابر در بعضی از الگوریتم‌ها می‌توانند متفاوت باشند.
مطابق مستندات موجود، وجود debug symbols هیچگونه تاثیری بر روی کارآیی یک برنامه دات نت ندارند.
لازم به ذکر است که عمده بهینه‌سازی‌ها در دات نت توسط JIT compiler صورت می‌گیرد (تا 99 درصد) و نه توسط کامپایلر زبان مورد استفاده (به همین جهت است که عده‌ای اعتقاد دارند در نهایت و هنگام اجرا تفاوتی مابین زبان‌های مختلف دات نت وجود نخواهد داشت). بر روی JIT compiler نیز می‌توان تاثیر گذاشت و نحوه عملکرد آنرا تغییر داد (حتی بر روی یک اسمبلی کامپایل شده). برای مثال یک فایل ini کنار اسمبلی پروژه خود ایجاد کنید (xyz.ini که در اینجا xyz.exe نام فایل اجرایی برنامه است). محتویات این فایل می‌تواند به صورت زیر باشد:

[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0

در اینجا می‌توان بهینه سازی را فعال و غیر فعال کرد و یا مطابق تنظیمات فوق برنامه را جهت دیباگ آماده نمود. (این روش با اسمبلی‌های ASP.Net کار نمی‌کند)
در دات نت فریم ورک 2 ، TrackingInfo مربوط به JIT compiler همواره تولید خواهد شد اما می‌توان بر روی بهینه سازی نهایی به صورت فوق نیز تاثیرگذار بود.

نکته:
اگر می‌خواهید هنگام مشاهده گزارش خطا، شماره سطر مورد نظر نیز در کدهای شما گوشزد ‌شود فایلهای pdb - program database تولید شده را هم ارائه دهید. حال شاید بخواهید هم برنامه را در حالت release ارائه دهید و هم pdb آن تولید شود، در این حالت باید خط فرمان کامپایل برنامه، با سوئیچ debug:pdbonly/ اجرا شود.
این مورد را در قسمت خواص پروژه، گزینه build و با کلیک بر روی دکمه advanced نیز می‌توان تنظیم نمود. (حالت پیش فرض release در VS.Net است)

خلاصه‌ی کلام: لطفا هنگام ارائه نهایی، گزینه release را از بالای صفحه در VS.Net انتخاب کنید. با تشکر!

مطالب
نکات امنیتی OWASP مخصوص برنامه نویس‌های دات نت
OWSAP ارگانی است غیرانتفاعی که هدف آن ترویج طراحی برنامه‌های امن وب است. در این راه هم مطالب آموزشی بسیار ارزشمندی را منتشر کرده است [+]. در لینک‌های زیر این مطالب از دیدگاه برنامه نویس‌های دات نت مورد بررسی قرار گرفته‌اند. هر چند مطابق آخرین گزارش WhiteHat که اخیرا منتشر شده [+]، تعداد Exploits مربوط به ASP.NET در مقایسه با PHP و جاوا بسیار کمتر بوده اما نیاز است تا با مشکلات عمومی موجود و راه‌حل‌های مرتبط بیشتر آشنا شد:



نظرات مطالب
استفاده از GitHub Actions برای Build و توزیع خودکار پروژه‌های NET Core.
چند نکته‌ی تکمیلی:
- بجای دستور dotnet pack در گردش کاری‌های فوق، می‌توان تنظیم زیر را به فایل csproj. برنامه اضافه کرد:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

- اگر قصد build یک پروژه‌ی library مخصوص دات نت 4x و دات نت جدید را با هم و توسط دستور dotnet build دارید، یعنی این پروژه multi-target است:
<TargetFrameworks>netstandard2.0;net462;</TargetFrameworks>
فقط کافی است قسمت تنظیم سیستم عامل را به صورت زیر تغییر دهید؛ چون ویندوز 2019 به همراه SDK مخصوص build دات نت 4x هم هست:
runs-on: windows-2019
نظرات مطالب
C# 8.0 - Ranges & Indices
بهبودهای indexes و ranges در دات نت 6

تا پیش از دات نت 6، امکان استفاده‌ی از مفاهیم این مطلب به همراه LINQ میسر نبود؛ اما در دات نت 6 می‌توان آن‌ها را به IEnumerable‌ها نیز اعمال کرد. برای مثال بجای
list.Skip(10).Take(5)
می‌توان نوشت:
list.Take(10..15)
و یا دریافت آخرین 10 عضو:
list.Take(^10..)
و یا دریافت تنها یک عضو از انتها:
list.ElementAt(^1)
نظرات مطالب
روش آپلود فایل‌ها به همراه اطلاعات یک مدل در برنامه‌های Blazor WASM 5x
سلام و تشکر از شما
 webHostEnvironment . WebRootPath_ در نسخه 6 دات نت نال بر میگرداند 
من از یک Razor Class Library استفاده میکنم که فایهای تصویری در فولدر wwwroot/lib  آن قرار دارد در نسخه 5 دات نت با خط کد زیر مشکلی ندارد و فایلها در web api قابل دسترسی است  ولی در دات نت 6,  PhysicalPath   مقدار نال بر میگرداند آیا به تنظیمات خاصی در  کلاس program نیاز دارد؟
[HttpGet]
[Route("GetImagess")]
public async Task<ActionResult> GetImagess ()
{  
 var rootPath = _webHostEnverioment.WebRootFileProvider.GetDirectoryContents("/_content/CommonComponents").FirstOrDefault(x => x.Name == "lib").PhysicalPath;
....
}

نظرات مطالب
همه چیز در مورد CLR : قسمت اول
- به صورت خیلی خلاصه، کار DEP غیر میسر کردن اجرای داده‌ها به صورت کد است (مانند اجرای کدهای مخرب از طریق سر ریز بافر) و کار ASLR هم غیرقابل پیش بینی کردن محل قرارگرفتن بیت‌ها و داده‌های برنامه در حافظه‌است.
- ربطی به زبان برنامه نویسی ندارند؛ درست است. اما CLR یعنی Common Language Runtime . این محیط اجرایی و JIT آن ASLR را میسر می‌کنند . حتی اسمبلی‌های ngen شده هم از دات نت 3.5 به بعد دارای ASLR فعال هستند. همچنین DEP هم از طریق روشن کردن سوئیچ NXCOMPAT کامپایلر فراهم شده‌است (از زمان دات نت 2 به بعد). یعنی اگر OpenSSL را با دات نت می‌نوشتند، هیچ وقت مشکل heartbleed رخ نمی‌داد.
نظرات مطالب
EF Code First #3
- ایجاد کلید منحصربفرد ترکیبی روی چند ستون
+ یک سری از فضاهای نام از EF 4 به EF 6 اندکی تغییر کرده‌اند که در مطلب «ارتقاء به Entity framework 6 » به آن اشاره شده‌است. در کل باید اجازه دهید تا NuGet ارجاعات قدیمی را به صورت خودکار حذف کند و ارجاعات جدید را اضافه کند. بعد هم از فضای نام جدید بدون مشکل می‌توانید استفاده کنید.
PM> update-package
+ اگر از دات نت 4 استفاده می‌کردید و اکنون برنامه را به دات نت 4.5 ارتقاء دادید، باید این دستور را صادر کنید:
PM> update-package -reinstall
به این ترتیب از EF مخصوص دات نت 4.5 استفاده خواهد شد. در غیر اینصورت تداخل فضای نام پیدا می‌کنید.