小编azz*_*123的帖子

Blazor WebAssembly 环境变量

我目前正在开发一个 .NET Standard 2.1 Blazor WebAssembly 应用程序。我尝试根据环境变量包含或排除样式表。

在 .NET Core 中,通常有环境标签助手,如下例所示:

<environment include="Development">
    <link rel="stylesheet" href="css/style.css" type="text/css" />
</environment>

<environment exclude="Development">
    <link rel="stylesheet" href="css/style.min.css" type="text/css" />
</environment>
Run Code Online (Sandbox Code Playgroud)

这在 Blazor 服务器应用程序中工作得非常好,但在 Blazor WASm 中却没有,因为这是客户端代码。

因此,我试图找到一个很好的解决方案,根据Blazor WebAssembly 中的环境变量包含/排除样式表

我目前的方法是使用 JSInterop 从我的 Blazor WASm Program.cs 文件中调用 JavaScript 辅助方法,并根据环境变量删除样式表:

await jsInterop.InvokeVoidAsync("helpers.setup", "Development");
Run Code Online (Sandbox Code Playgroud)

我在客户端的 JavaScript 如下所示:

window.helpers = {
    setup: (environment) => {

        if (environment === "Development") {
            // remove production styles
        }

        if (environment !== "Development") {
            // remove development …
Run Code Online (Sandbox Code Playgroud)

javascript c# webassembly asp.net-core blazor

14
推荐指数
1
解决办法
4937
查看次数

Blazor WebAssembly 无法从类库加载资源文件

我目前正在开发托管在 .NET Standard 2.1 中的 Blazor WebAssembly Asp.NET。

我尝试从单独的 .NET Standard 2.1 加载资源文件。C# 类库。

不幸的是我总是收到以下错误:

“Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] 未处理的异常渲染组件:无法加载字段“MyNamespace.Footer:k__BackingField”的类型(0),原因是:无法加载文件或程序集“MyNamespace.Resources”, Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' 或其依赖项之一。”

  1. 我的 .resx 文件设置为访问修饰符:公共,在属性选项卡中如下所示:

在此输入图像描述

我的项目结构如下所示:

  • MyNamespace.BlazorApp.Client
  • MyNamespace.BlazorApp.Server
  • MyNamespace.BlazorApp.Resources

我这样加载资源:

  1. MyNamespace.BlazorApp.Client:

在我的 Program.cs Main 方法中,我设置当前区域性如下:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");
Run Code Online (Sandbox Code Playgroud)

我添加本地化服务:

services.AddLocalization();
Run Code Online (Sandbox Code Playgroud)

接下来,在我想要使用文化设置的 .razor 页面中,我注入了本地化服务:

@inject IStringLocalizer<Translations> Translations
Run Code Online (Sandbox Code Playgroud)
  1. MyNamespace.BlazorApp.Server

这里我只是将项目引用加载到我的资源项目中。我在这个项目中没有使用 .resx。

您知道如何从外部 .NET Standard 2.1 加载资源吗?C# 类库集成到 Blazor Wasm 项目中?

c# embedded-resource webassembly blazor

5
推荐指数
1
解决办法
5239
查看次数

触发并处理异步事件

我目前正在开发 .net 5 Blazor 应用程序。

我使用事件将数据从一个组件传递到另一个组件。

不幸的是,我当前的逻辑是同步的 - 但我宁愿使用异步事件处理程序。

因此,我需要使用以下代码来处理我的事件:

Task.Run(async () => await ChangeNumbers());
Run Code Online (Sandbox Code Playgroud)

是否可以在没有 Task.Run 的情况下异步处理事件?

  • 我的状态服务如下所示:
public class MyComponentState
{
    public int MyNumber { get; set; }
    
    // Is there a way to declare this event Action async??
    public event Action OnChange;

    public void DoStuff(int myNumber)
    {
        MyNumber = myNumber;

        NotifyStateChanged();
    }

    private void NotifyStateChanged() => OnChange?.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
  • 处理状态的组件如下所示:
public class MyOtherComponentDisplay : ComponentBase, IDisposable
{
    [Inject]
    public MyComponentState MyComponentState { get; set; }

    protected override void …
Run Code Online (Sandbox Code Playgroud)

c# events asynchronous blazor .net-5

4
推荐指数
1
解决办法
6234
查看次数

如何从 Blazor WebAssembly 中的目录读取文件

我目前正在开发 .NET Standard 2.1 Blazor WebAssembly 应用程序。我尝试从 wwwroot 目录读取文件路径

Blazor WebAssembly 应用程序不是 Asp.NET Core 托管的。

在此输入图像描述

我尝试从我的Main方法中读取所有以 .js 结尾的文件路径Program.cs,如下所示:

var filePaths = ReadWwwRootJSFilePaths();
private static string[] ReadWwwRootJSFilePaths()
        {
            Console.WriteLine("CurrentDirectory: " + Directory.GetCurrentDirectory());
            var dir = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "js");
            Console.WriteLine("dir: " + dir);
            var files = Directory.GetFiles(dir);
            foreach (string file in files)
            {
                Console.WriteLine("file: " + file);
            }
            return files;
        }
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时,我只在浏览器中收到一条错误消息:System.IO.DirectoryNotFoundException

在此输入图像描述

你知道如何解决这个问题吗?您知道如何从wwwrootBlazor WASm(非 ASP.NET Core 托管)应用程序中的目录读取文件路径吗?

也许我还不太了解 Blazor WebAssembly(不是 ASP.NET Core 托管)的概念。实际上可以使用 …

c# file webassembly asp.net-core blazor

2
推荐指数
1
解决办法
2万
查看次数

将不同的 appsettings.json 加载到 Blazor WebAssembly 中的 Window 对象中

我目前正在开发 .NET Standard 2.1 Blazor WebAssembly 应用程序。我尝试将不同的 appsettings.{Environment}.json 配置加载到我的 Window 命名空间 (JavaScript) 中。

因此,我按照这篇博文进行操作:

https://jkdev.me/blazor-appsettings/

到目前为止一切顺利:我在我的 wwwroot 目录中添加了 3 个 appsettings.*.json 文件:

应用程序设置.json:

{
  "App": {
    "Message": "Hello World!"
  }
}
Run Code Online (Sandbox Code Playgroud)

appsettings.Development.json:

{
  "App": {
    "Environment": "Development"
  }
}
Run Code Online (Sandbox Code Playgroud)

appsettings.Staging.json:

{
  "App": {
    "Environment": "Staging"
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的 program.cs Main 方法中,我构建了新的配置设置,如下所示:

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("app");

        ConfigureServices(builder.Services);

        await builder.Build().RunAsync();
    }

    private static void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton(
             provider => …
Run Code Online (Sandbox Code Playgroud)

javascript c# webassembly asp.net-core blazor

1
推荐指数
1
解决办法
6498
查看次数