‫۷ سال و ۶ ماه قبل، یکشنبه ۶ فروردین ۱۳۹۶، ساعت ۲۳:۱۲
به روز رسانی
فایل global.json در VS 2017 و ساختار جدید آن، از پروژه‌های ASP.NET Core حذف شده‌است. جایگزین آن مراجعه به برگه‌ی خواص پروژه و انتخاب شماره فریم ورک مدنظر است:

‫۷ سال و ۶ ماه قبل، یکشنبه ۶ فروردین ۱۳۹۶، ساعت ۲۲:۵۵
در متن توضیح دادم: «... زمانیکه میان افزار RequestLocalization فعال می‌شود، سه تامین کننده‌ی پیش فرض، جهت مشخص ساختن فرهنگ ترد جاری بکار گرفته خواهند شد ...». یکی از این سه مورد را استفاده کنید. مثلا: «... اکنون اگر علاقمند بودید تا به کاربر امکان انتخاب زبانی را بدهید، یک چنین اکشن متدی را طراحی کنید ...». برای نمونه یک منو را طراحی کنید تا کاربر زبان مدنظر را از بین چند زبان انتخاب کند. سپس اکشن متد مرتبط با آن، کار تنظیم کوکی آن‌را انجام دهد.
البته در اینجا «... تامین کنند‌ه‌ی چهارمی را هم می‌توان تدارک دید ...». کمی بالاتر در قسمت نظرات عنوان شده‌است (FaRequestCultureProvider). کار آن تنظیم فرهنگ پیش فرض ترد جاری به fa-IR استاندارد است.
‫۷ سال و ۶ ماه قبل، شنبه ۵ فروردین ۱۳۹۶، ساعت ۱۶:۴۷
یک نکته: روش صحیح Dispose سرویس‌ها داخل وظایف تعریف شده

با توجه به اینکه داخل وظایف، چرخه‌ی طول عمر یک درخواست وب رخ نمی‌دهد، کار Dispose سرویس‌های HybridHttpOrThreadLocalScoped مانند IUnitOfWork را باید دستی انجام دهید:
    public static class IoCWrapper
    {
        public static void RunAndDispose(Action action)
        {
            try
            {
                action();
            }
            finally
            {
                // اگر در درخواست وب بودیم، به صورت خودکار در پایان کار همه چیز تمام می‌شود
                if (!HttpContextLifecycle.HasContext())
                {
                    new HybridLifecycle().FindCache(null).DisposeAndClear();
                }
            }
        }

        public static T GetInstance<T>()
        {
            return SmObjectFactory.Container.GetInstance<T>();
        }
    }
و سپس برای استفاده‌ی از آن داخل وظایف:
        public override void Run()
        {
            IoCWrapper.RunAndDispose(() =>
            {
                var draftsService = IoCWrapper.GetInstance<IBlogPostDraftsService>();
                draftsService.RunConvertDraftsToPostsJob();
            });
        }
به این ترتیب کار Dispose وهله‌ی Context برنامه به درستی صورت گرفته و هم برنامه دچار نشتی حافظه نخواهد شد و هم Context دریافتی حالت singleton و «کش شده» را پیدا نمی‌کند (اگر dispose نشود، هربار درخواست آن معادل است با دریافت همان وهله‌ی قبلی).
‫۷ سال و ۶ ماه قبل، جمعه ۴ فروردین ۱۳۹۶، ساعت ۰۱:۵۰
یک نکته‌ی تکمیلی: صرفنظر کردن از مقدار out
در C# 7 اگر مقدار خروجی حاصل از out مهم نبود، می‌توان آن‌را با _ جایگزین کرد:
var intString = "123";
if (int.TryParse(intString, out _))
{
    // it's integer
}
در این مثال برای ما فقط تشخیص عدد صحیح بودن رشته‌ی دریافتی مهم است و نه مقدار بازگشت داده شده‌ی توسط out. به همین جهت آن‌را با _ مشخص کرده‌ایم.
البته کامپایلر در پشت صحنه کار تعریف یک متغیر را در اینجا انجام خواهد داد؛ اما در حین کدنویسی نیازی به ذکر آن نیست.
‫۷ سال و ۶ ماه قبل، یکشنبه ۲۹ اسفند ۱۳۹۵، ساعت ۲۱:۵۲
- این مطلب برای بوت استرپ 2 نوشته شد . به روز شده‌ی آن برای بوت استرپ 3 در اینجا: «صفحات مودال در بوت استرپ 3» 
- در مورد کار ای‌جکسی با partial view به مطالب زیر مراجعه کنید:
« نمایش ای‌جکسی یک partial view در popover بوت استرپ 3»
«ASP.NET MVC #21 »   
- ذکر "dataType: "html یعنی انتظار بازگشت html را از سرور دارید. نمونه‌ی نحوه‌ی پردازش خروجی آن در مطلب «بارگزاری PartialView با استفاده از jQuery در زمان اجرا» بحث شده‌است و متفاوت است با حالت "dataType: "json .
‫۷ سال و ۶ ماه قبل، یکشنبه ۲۹ اسفند ۱۳۹۵، ساعت ۱۵:۴۸
یک نکته‌ی تکمیلی
اگر پس از مهاجرت به VS 2017، خطای ذیل را در حین اجرای مهاجرت‌ها مشاهده کردید:
error MSB4006: There is a circular dependency in the target dependency graph involving target "GetEFProjectMetadata"
الف) اسمبلی‌های ختم به Design و Tools باید دارای ویژگی "PrivateAssets="All شوند (میدان دید محدود به اسمبلی جاری) تا مشکلات circular dependency را ایجاد نکنند. یک نمونه 
ب) اگر در دستورات شما «configuration Release--» وجود دارد، آن‌را حذف کنید و نیازی به آن نیست؛ چون به صورت خودکار توسط MSBuild مدیریت می‌شود.

نمونه‌ای از تغییرات مورد نیاز جهت رفع این مشکل
‫۷ سال و ۶ ماه قبل، یکشنبه ۲۹ اسفند ۱۳۹۵، ساعت ۰۲:۲۷
هدف، واگذاری مسئولیت در زمان اجرا است (delegation = واگذاری مسئولیت) به متدی که پیشتر پیاده سازی شده‌است. متدی که خارج از میدان دید شیء جاری است و پیاده سازی آن به استفاده کننده واگذار می‌شود؛ مانند همان مواردی که لینک داده شدند یا خلاصه‌ی مطلب جاری، «روشی دیگر جهت معکوس سازی وابستگی‌ها». البته این روزها بیشتر Func و Action بجای Delegates خام نگارش‌های ابتدایی #‍‍C استفاده می‌شوند و کمتر کد جدیدی را می‌توانید پیدا کنید که دیگر در آن تعریف public delegate وجود خارجی داشته باشد (این نوع کدها مربوط به دوران C# 2.0 هستند). مباحث async، تاریخچه، تکامل و نکات آن‌ها را هم در اینجا پیگیری کنید.