簡體   English   中英

如何在沒有 Blazor Web 組件的情況下從 JavaScript 使用 C# WebAssemly

[英]How to use C# WebAssemly from JavaScript without Blazor web components

要將 C# 編譯成 WebAssemly 並與 JS 進行互操作,需要使用 Blazor WebAssembly ASP.NET 框架,該框架專為 SPA 設計並且包含大量開銷,以防您只想使用來自 JS 的 C# 庫。

將 DLL 編譯為 WebAssembly 並從 JavaScript 使用它的最低設置是什么?

使用以下配置(通過 .csproj)創建一個新的空 C# 項目:

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <LangVersion>10</LangVersion>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.0" />
        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.0" PrivateAssets="all" />
    </ItemGroup>

</Project>

初始化 Blazor JS 運行時並指定綁定:

namespace WasmTest;

public class Program
{
    private static IJSRuntime js;

    private static async Task Main (string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        var host = builder.Build();
        js = host.Services.GetRequiredService<IJSRuntime>();
        await host.RunAsync();
    }

    [JSInvokable]
    public static async Task<string> BuildMessage (string name)
    {
        var time = await GetTimeViaJS();
        return $"Hello {name}! Current time is {time}.";
    }

    public static async Task<DateTime> GetTimeViaJS ()
    {
        return await js.InvokeAsync<DateTime>("getTime");
    }
}

使用dotnet publish並使用來自 JS 的 C# 庫:

<script src="_framework/blazor.webassembly.js" autostart="false"></script>

<script>
    window.getTime = () => {
        return new Date().toJSON();
    };
    window.onload = async function () {
        await Blazor.start();
        const msg = await DotNet.invokeMethodAsync("WasmTest", "BuildMessage", "John");
        console.log(msg);
    };
</script>

以下是 GitHub 上的示例模板解決方案: https : //github.com/Elringus/WasmTest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM