我目前正在开发一个 .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) 我目前正在开发托管在 .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' 或其依赖项之一。”
我的项目结构如下所示:
我这样加载资源:
在我的 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)
这里我只是将项目引用加载到我的资源项目中。我在这个项目中没有使用 .resx。
您知道如何从外部 .NET Standard 2.1 加载资源吗?C# 类库集成到 Blazor Wasm 项目中?
我目前正在开发 .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) 我目前正在开发 .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 托管)的概念。实际上可以使用 …
我目前正在开发 .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) blazor ×5
c# ×5
webassembly ×4
asp.net-core ×3
javascript ×2
.net-5 ×1
asynchronous ×1
events ×1
file ×1