‫۲ ماه قبل، شنبه ۲۰ مرداد ۱۴۰۳، ساعت ۱۲:۵۹

برای نصب از طریق دانلود فایل های دات نت به صورت آفلاین بر روی سرور بدون اینترنت میتوانید از روش زیر هم استفاده کنید.

  • ابتدا فایل های دات نت رو بسته به معماری سیستم دانلود کنید. (Arm32 | Arm32 Alpine | Arm64 | Arm64 Alpine | x64 | x64 Alpine)
  • سپس فایل دات نت رو به سرور خود منتقل کنید و از طریق دستورات زیر، خط فرمان dotnet رو به ترمینال اضافه کنید:
export DOTNET_ROOT="$HOME/yourpath/dotnet"
export PATH="$PATH:$HOME/yourpath/dotnet"

مشابه با Edit the system environment variables در ویندوز

و اکنون با نوشتن دستور dotnet --version میتوانید نگارش ورژن دات رو مشاهده کنید.

همچنین اگر نیاز به نصب tools هایی مانند ef core نیاز دارید میتوانید از دستور زیر استفاده کنید:

dotnet tool install --global dotnet-ef
export PATH="$PATH:$HOME/.dotnet/tools"

این روش در خود مستندات مایکروسافت توضیح داده شده اما استفاده از پکیج های داخلی ابونتو و یا اجرای اسکریپت ها خیلی آسون تر هستش و این روش صرفا موقعی استفاده میشه که امکان اجرای دستورات بر روی یک سیستم آفلاین وجود ندارد.

‫۱ سال و ۵ ماه قبل، سه‌شنبه ۲۹ فروردین ۱۴۰۲، ساعت ۰۳:۳۷
در صورت نیاز به ویرایش اسناد در خود مرورگر، میتوان از کتابخانه text control  استفاده کرد که عملا به شما یک نرم افرار word تحت وب میده.
همچنین قابلیت merge کردن data source‌های متفاوتی رو با قالب بارگذاری شده داره.
جایگزینی براش نیست واقعا ولی برای موارد open source، بجز OpenXmlWordHelper میتوان از کتابخانه Aspose  هم برای جایگزینی پارامتر در یک فایل ورد استفاده کرد. 
‫۱ سال و ۹ ماه قبل، پنجشنبه ۲۴ آذر ۱۴۰۱، ساعت ۲۰:۲۴
بله در برنامه هایی که هنوز به .net 7 ارتقا داده نشده اند نیز رخ میدهد.
البته فقط در متد هایی باعث خطا خواهد شد که به نحوی از system.data.sqlclient استفاده کرده اند (مانند context.database.(executeRawSql و سایر کد‌ها که با ef core و linq نوشته شده، خطایی تولید نخواهند کرد.
‫۲ سال قبل، چهارشنبه ۳۰ شهریور ۱۴۰۱، ساعت ۰۳:۱۸
در مستندات خود مایکروسافت نیز پیکیج WebOptimizer معرفی شده و با توجه به اینکه asp.net core به صورت native  مبحث bundling و minification را پوشش نمی‌دهد، بهترین گزینه همین بسته میباشد. اما چند نکته در این بسته وجود داره:

- وقتی شما از تنظیمات پیش فرض (بدون اعمال هیچ کانفیگی) استفاده کنید، تمام فایل‌های استاتیکی که در صفحه در خواست شده را minify خواهد کرد.
برای مثال دو فایل bootstrap.min.css و index.css را در یک صفحه رفرنس داده اید. در هر ریکوئست (اگر تنظیمات را اعمال نکرده باشید) تمامی فایل‌ها را minify خواهد کرد که این امر سبب کاهش مدت زمان بارگذاری صفحه و خطا در نمایش و چیدمان خواهد شد.
اما میتوانید یک مسیر را به صورت سراسری مشخص کنید و تعدادی فایل دیگر را هم مشخص کنید تا فایل‌های از پیش minify شده را نیز به اشتباه فشرده سازی نکند.
برای مثال میتوان گفت فقط تمام فایل‌های مسیر wwwroot/myJsFiles را فشرده سازی کن و  در این صورت کاری به فولدر wwwroot/myLibraries  نخواهد داشت. یا فقط فایل‌های b.js، a.js و c.js فشرده شوند.
- minify در زمان runtime: هر بار که ریکوئست به یک فایل استاتیک ارسال شود، این پکیج در همان لحظه عملیات minify را شروع خواهد کرد.
(در بارگذاری اولیه و قبل از cache مرورگر) البته که اگر نکته اول را رعایت کرده باشید، پرفرمنس را نه تنها کاهش میدهد، بلکه باعث افزایش هم میشود. ولی قطعا در حالتی که از قبل فایل‌ها minify شده باشند، پرفرمنس بیشتر خواهد بود.
- متاسفانه این پکیج فشرده سازی html را ندارد و نمونه خوبی در حد این بسته را پیدا نکردم.
‫۲ سال و ۳ ماه قبل، سه‌شنبه ۱۷ خرداد ۱۴۰۱، ساعت ۰۳:۱۳
اکثرا از base64 استفاده میکنم. برای برنامه نویس‌های موبایل و فرانت قابل قبول‌تر است :)
نمونه کد تبدیل base64 به iformfile:
public static async Task<ResponsePayload<string>> SaveBase64(this string imgBase64, string filePath, FileSizeType fileSizeType)
    {
        if (string.IsNullOrWhiteSpace(imgBase64))
            return new ResponsePayload<string>(false, "فایل را وارد کنید.", null);

        string data;
        if (imgBase64.StartsWith("data:"))
        {
            string[] base64Arr = imgBase64.Split(',');
            if (base64Arr.Length == 0)
                return new ResponsePayload<string>(false, "فایل را وارد کنید.", null);
            data = base64Arr[1];
        }
        else
        {
            data = imgBase64;
        }

        byte[] bytes = Convert.FromBase64String(data);
        var fileType = GetFileExtension(imgBase64);
        if (string.IsNullOrEmpty(fileType))
            return new ResponsePayload<string>(false, "فایل وارد شده صحیح نمی‌باشد.", null);

        using var stream = new MemoryStream(bytes);
        IFormFile file = new FormFile(stream, 0, bytes.Length, filePath, "." + fileType);

        string fileName = Guid.NewGuid().ToString().Replace("-", "");
        return await UploadFile(file, filePath + fileName, fileSizeType);
    }
private static string GetFileExtension(string base64String)
    {
        string data;

        if (base64String.StartsWith("data:"))
        {
            string[] base64Arr = base64String.Split(',');
            if (base64Arr.Length == 0)
                return "";
            data = base64Arr[1];
        }
        else
        {
            data = base64String;
        }
        return data.Substring(0, 5).ToUpper() switch
        {
            "IVBOR" => "png",
            "/9J/4" => "jpg",
            "AAAAF" => "mp4",
            "JVBER" => "pdf",
            "AAABA" => "ico",
            "UMFYI" => "rar",
            "E1XYD" => "rtf",
            "U1PKC" => "txt",
            "MQOWM" => "srt",
            "77U/M" => "srt",
            "UESDB" => "",
            "" => "docx",
            _ => string.Empty,
        };
    }
}

public class FileSizeType
{
    public int Size { get; set; }
}

‫۲ سال و ۴ ماه قبل، سه‌شنبه ۲۷ اردیبهشت ۱۴۰۱، ساعت ۰۱:۱۴
اگر برنامه خود را توسط دستور dotnet new blazorwasm -o BlazorIIS --hosted --no-https  ایجاد نکردیم و یا گزینه hosting module را در ویژوال استودیو نزدیم، چگونه برنامه blazor wasm خود را بهمراه api آن در یک سایت iss پابلیش کنیم؟

- پکیج زیر را به پروژه سرور خود اضافه کنید
Microsoft.AspNetCore.Components.WebAssembly.Server
- در فایل program.cs پروژه سرور، کد‌های زیر را در پایین UseHttpsRedirection اضافه کنید:
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();

app.UseRouting();
- پایین MapControllers  کد زیر را اضافه کنید:
app.MapFallbackToFile("index.html");
- پروژه کلاینت (پروژه blazor wasm) که دقیقا با پروژه سرور در یک solution رفرنس داده شده است را به پروژه سرور رفرنس دهید.
یعنی پروژه blazor wasm شما باید در پروژه API شما رفرنس داده شود.
نکته: در این جا میتوانید برای پیاده سازی منطق از یک assembly یکسان جهت کنترل مشترک logic بین دو پروژه استفاده کنید.
کار تمام شده است و میتوانید توسط دستو dotnet publish که در مقاله و نظرات، کامل به آن اشاره شده است، استفاده کنید
‫۲ سال و ۴ ماه قبل، دوشنبه ۱۲ اردیبهشت ۱۴۰۱، ساعت ۰۵:۳۸
برای اجرا شدن دستور زیر:
* خط به خط کد‌های زیر را، در cmd و پشت سر هم اجرا کنید
(نکته): باید پایتون را از قبل نصب داشته باشید (آموزش نصب پایتون)
# Get the emsdk repo
git clone https://github.com/emscripten-core/emsdk.git

# Enter that directory
cd emsdk

# Download and install the latest SDK tools.
emsdk install latest

# Make the "latest" SDK "active" for the current user. (writes .emscripten file)
emsdk activate latest

# Activate PATH and other environment variables in the current terminal
emsdk_env.bat
حالا اگر cmd شما در همچین مسیری قرار دارد:
C:\Users\{your pc name}\emsdk
میتوانید دستوری که در متن مقاله ذکر شده را اجرا کنید (البته با اندکی تغییر):
emcc C:\Users\{your pc name}\sqlite\sqlite3.c -shared -o D:\e_sqlite3.o
فایل کامپایل شده e_sqlite3.o رو در پروژه خود کپی کنید و طبق مقاله پیش بروید  و این فایل نیتو را به پروژه رفرنس بدهید.
اکنون اگر دستور dotnet bulid را در ترمینال بزنید،  احتمالا با همچین هشداری مواجه خواهید شد:
warning : @(NativeFileReference) is not empty, but the native references won't be linked in, because neither $(WasmBuildNative), nor $(RunAOTCompilation) are 'true'. NativeFileReference=Data\e_sqlite3.o [D:\project\Yourproject\Yourproject.csproj] 1 Warning(s)
در صورت مشاهده همچین هشداری و حل این مشکل (اضافه نشدن فایل نیتیو به برنامه) ابتدا 
<RunAOTCompilation>true</RunAOTCompilation>
را به قسمت بالای فایل csproj خود و در قسمت 
<PropertyGroup>
اضافه کنید و سپس دستور زیر را اجرا کنید:
dotnet workload install wasm-tools
‫۲ سال و ۸ ماه قبل، جمعه ۲۴ دی ۱۴۰۰، ساعت ۱۳:۴۸
ویدیو youtube  که توسط  Dotnet Community Standup برگزار شد، در آن نیز از کتابخانه‌های نیتو استفاده شد. با استفاده از sqllite، اپلیکیشن میتواند بدون نیاز به اینترنت هم کار کند و زمانی که به اینترنت کانکت شد، خود را با سرور سینک کند. همچنین امکان استفاده از کامپوننت‌های بلیزر در react هم خیلی جالب بود که در ویدیو بالا بهش اشاره شده.
پیاده سازی دیتابیس در blazor server با blazor wasm تفاوت دارد. تا آنجایی که من اطلاع دارم شما در یک پروژه blazor webassembly نمیتوانید دستور ef migrations را اجرا کنید. چون wasm اصلا فایل startup.cs را ندارد (بررسی ساختار پروژه ) و این نوع پروژه‌ها بیشتر در پروژه‌های کلاینتی استفاده میشوند و شما برای کار با امکانات سروری asp.net core باید از api استفاده کنید و راه حلی که من پیدا و پیاده سازی کردم :
- یک پروژه api بسازید:
dotnet new webapi -o WebService
بعد از اضافه کردن، باید آن را به solution نیز اضافه کنید:
dotnet sln add WebService/WebService.csproj

سپس class library مدل‌ها یا لایه دیتای خود را به این پروژه با استفاده از دستور زیر رفرنس دهید:
dotnet add Web/Web.csproj reference DataLayer/DataLayer.csproj
حالا به راحتی میتوانید دستور‌های ef را در پروژه webassebly خود اجرا کنید.
چند نکته:
- context خود را بسازید
- استارت‌آپ  و appsetting.json را طبق همین مقاله تنظیم کنید
- اگر در هنگام migration نیاز به نصب بسته ای بود نام بسته مورد نظر را جای دستور زیر قرار بدهید:
برای مثال
cd YourFolder
dotnet add package Microsoft.EntityFrameworkCore.Design
نمونه دستورات ef که در متن اصلی مقاله نیز توضیح داده شده:
dotnet tool update --global dotnet-ef

dotnet ef migrations --startup-project WebService/ add Init -p DataLayer --context SqlServerContext

dotnet ef  --startup-project WebService/ database update Init -p DataLayer --context SqlServerContext