‫۶ سال و ۶ ماه قبل، سه‌شنبه ۱۵ اسفند ۱۳۹۶، ساعت ۱۱:۵۰
ارتقاء به ASP.NET Core 2.1

قابلیتی به نام end-to-end in-memory test به ASP.NET Core 2.1 اضافه شده‌است که برای اجرای آن نیاز به وجود یک چنین امضایی در فایل Program.cs هست:
public static IWebHostBuilder CreateWebHostBuilder(string [] args)
بنابراین برای ارتقاء برنامه‌های ASP.NET Core 2.0 به 2.1 این مراحل باید طی شوند:
الف) فایل Program.cs را باز کنید.
ب) متد BuildWebHost قبلی را به CreateWebHostBuilder تغییر نام دهید. همچنین در این حالت نوع خروجی آن‌را به IWebHostBuilder تنظیم کرده و فراخوانی ()Build. را از انتهای آن حذف کنید.
ج) اکنون بدنه‌ی متد Main آن چنین شکلی را پیدا می‌کند:
CreateWebHostBuilder(args).Build().Run();
و یا به صورت خلاصه فایل ابتدایی یک قالب ASP.NET Core 2.1 به این صورت است:
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
‫۶ سال و ۶ ماه قبل، سه‌شنبه ۱۵ اسفند ۱۳۹۶، ساعت ۱۱:۱۸
بعد از انجام تغییرات در مدل‌ها و نگاشت‌های آن‌ها، نیاز است فایل _01-add_migrations.cmd را اجرا کنید تا نحوه‌ی اعمال این تغییرات به بانک اطلاعاتی تولید شود. سپس یا فایل _02-update_db.cmd را اجرا کنید تا این تغییرات به بانک اطلاعاتی اعمال شوند، یا قطعه کد Database.Migrate هم دقیقا کار همین اسکریپت دوم را انجام می‌دهد.
- services.AddDataProtection یعنی همان مقدمه‌ی بحث؛ یا ذخیره سازی کلیدها در حافظه به صورت پیش‌فرض. مابقی بحث جهت دائمی کردن این کلیدها است. البته دائمی کردن هم طول عمری دارد.
- در سرورهای اشتراکی یا از روش «یک نکته‌ی تکمیلی: روش ذخیره سازی کلید موقتی تولید شده در بانک اطلاعاتی بجای حافظه‌ی سرور » استفاده کنید، یا با هاست تماس بگیرید و تنظیم گزینه‌ی 2 یا همان Load user profile به true را به آن‌ها اعلام کنید (چون تنظیمات برنامه‌های ASP.NET Core با نگارش‌های قبلی یکی نیست؛ این یک مورد را هم بهتر است به لیست تنظیمات اولیه‌ی برنامه اضافه کنند).
- در حالت سوم، ذکر Certificate برای رمزنگاری اطلاعات ضروری است؛ در غیراینصورت این کلیدها به صورت معمولی و واضح ذخیره خواهند شد.
در پروژه‌ی DNTIdentity از این روش استفاده شده‌است. اگر برنامه را اجرا کنید و داخل متدهای کلاس DataProtectionKeyService آن break point قرار دهید، پس از آغاز اولیه برنامه، دیگر فراخوانی نمی‌شوند. بنابراین تاثیر منفی بر روی کارآیی برنامه ندارد.
‫۶ سال و ۶ ماه قبل، شنبه ۱۲ اسفند ۱۳۹۶، ساعت ۱۸:۲۵
یک نکته‌ی تکمیلی جهت به روز رسانی این مطلب به ASP.NET Core 2.1

نکات «تغییرات مورد نیاز جهت ارتقاء به ASP.NET Core 2.1» در اینجا هم صادق هستند. سمت سرور آن یکی است. سمت کلاینت آن نیز به همین ترتیب. فقط پس از نصب بسته‌ی جدید SignalR، نیاز است یک سطر زیر را نیز تغییر دهید:
از
import { HubConnection } from "@aspnet/signalr-client";
به
import { HubConnection } from "@aspnet/signalr";
‫۶ سال و ۶ ماه قبل، شنبه ۱۲ اسفند ۱۳۹۶، ساعت ۱۷:۳۰
تغییرات مورد نیاز جهت ارتقاء به ASP.NET Core 2.1

تغییرات سمت سرور:
1) ابتدا فایل csproj فوق به صورت زیر تغییر می‌کند:
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.0-preview1-final" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.1.0-preview1-final" />
    <DotNetCliToolReference Include="BundlerMinifier.Core" Version="2.6.362" />
  </ItemGroup>
  <Target Name="PrecompileScript" BeforeTargets="BeforeBuild">
    <Exec Command="dotnet bundle" />
  </Target>
</Project>
در اینجا چون از بسته‌ی Microsoft.AspNetCore.App استفاده می‌شود، دیگر نیازی به ذکر مستقیم بسته‌ی SignalR نیست و این بسته جزئی از آن است.

2) سپس در فایل Startup.cs، به ابتدای path باید یک / اضافه شود؛ وگرنه در زمان اجرا برنامه کرش می‌کند:
app.UseSignalR(routes =>
{
   routes.MapHub<MessageHub>(path: "/message");
});
3) تمام متدهای InvokeAsync شده‌اند SendAsync:
 await _messageHubContext.Clients.All.SendAsync("broadcastMessage", message);
و
 return Clients.All.SendAsync("broadcastMessage", message);


تغییرات سمت کلاینت:
1) نام بسته‌ی signalr در npm به صورت ذیل تغییر کرده‌است و دیگر signalr-client نیست:
 npm install @aspnet/signalr
2) پس از نصب بسته‌ی جدید signalr، مسیر فایل signalr.min.js در فایل bundleconfig.json به صورت زیر تغییر می‌کند:
 node_modules/@aspnet/signalr/dist/browser/signalr.min.js
3) متد invoke به send تغییر نام یافته‌است:
 connection.send('send', $('#message').val());