当 ASPNETCORE_ENVIRONMENT 更改为 "Development" 以外的任何内容时 - 在 VS 中调试时,Blazor 应用程序看不到来自 razor class 库的资源
When ASPNETCORE_ENVIRONMENT changed to anything but "Development" - Blazor app doesn't see resources from razor class libraries when debugged in VS
也许试试这个例子:
https://github.com/HTD/BlazorProfiles
这是一个演示 Blazor 应用程序(默认)。
我创建了 2 个自定义应用程序配置文件:开发和生产。
只需在 Visual Studio.
中按 F5 键,两者都应该可以调试
然后我创建了一个虚拟的 Razor 组件库并将其命名为 RCL。
我把它作为主项目的依赖项。
在我的虚拟 RCL 中,在 wwwroot
目录中我添加了 extra.css
文件。
该文件的作用是将背景颜色更改为浅绿色。
如果它发生 - 这意味着文件已经加载。如果背景保持灰色/白色,则未加载。
这是加载 CSS 的 _Host.cshtml
片段:
<link href="_content/RCL/extra.css" rel="stylesheet" />
尝试运行它。有用。但是在一个条件下:
ASPNETCORE_ENVIRONMENT
环境变量必须设置为“开发”。
如果您测试 Production
配置文件(或将环境变量更改为“Production”),然后 运行 应用程序 - extra.css
文件将不会加载。
背景没有变成绿色,所以出了点问题。
为什么会这样?这是 Visual Studio 中的错误吗?
如果你想知道为什么我需要设置这个环境变量:它允许加载额外的
appsettings.[ASPNETCORE_ENVIRONMENT].json
文件。所以我可以为我的应用程序设置不同的配置。我需要使用不同的配置测试我的应用程序。现在我只能在 Visual Studio 中使用“开发”配置对其进行调试。当我将配置更改为其他任何内容时,我无法 运行 我的应用程序,因为它无法从库中加载组件所需的必要 JavaScript 文件。
因此,预期的行为:无论我在“ASPNETCORE_ENVIRONMENT”中放入什么 - RCL 中的文件都应该始终加载。他们为什么不应该?
实际行为:使用不同的配置(配置文件)会中断 Razor 组件库加载。
找到了in the ASP.NET core github issues. It's actually mentioned in the docs。
您需要在虚拟主机中启用静态网络资产:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStaticWebAssets(); // <----
webBuilder.UseStartup<Startup>();
});
编辑:注意文档中的注释
Calling UseStaticWebAssets isn't required when running an app from published output (dotnet publish).
今天这让我困惑了几个小时,直到我找到了公认的答案,这让我找到了文档。对于 CORE 6.0
应用程序,情况略有变化:
...static web assets are enabled by default in the Development
environment. To support assets in other environments when running from
build output, call UseStaticWebAssets on the host builder in
Program.cs
:
builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets();
你还需要调用
app.UseStaticFiles();
从 var app = builder.Build();
构建 app
之后进一步向下
也许试试这个例子:
https://github.com/HTD/BlazorProfiles
这是一个演示 Blazor 应用程序(默认)。 我创建了 2 个自定义应用程序配置文件:开发和生产。 只需在 Visual Studio.
中按 F5 键,两者都应该可以调试然后我创建了一个虚拟的 Razor 组件库并将其命名为 RCL。
我把它作为主项目的依赖项。
在我的虚拟 RCL 中,在 wwwroot
目录中我添加了 extra.css
文件。
该文件的作用是将背景颜色更改为浅绿色。
如果它发生 - 这意味着文件已经加载。如果背景保持灰色/白色,则未加载。
这是加载 CSS 的 _Host.cshtml
片段:
<link href="_content/RCL/extra.css" rel="stylesheet" />
尝试运行它。有用。但是在一个条件下:
ASPNETCORE_ENVIRONMENT
环境变量必须设置为“开发”。
如果您测试 Production
配置文件(或将环境变量更改为“Production”),然后 运行 应用程序 - extra.css
文件将不会加载。
背景没有变成绿色,所以出了点问题。 为什么会这样?这是 Visual Studio 中的错误吗?
如果你想知道为什么我需要设置这个环境变量:它允许加载额外的
appsettings.[ASPNETCORE_ENVIRONMENT].json
文件。所以我可以为我的应用程序设置不同的配置。我需要使用不同的配置测试我的应用程序。现在我只能在 Visual Studio 中使用“开发”配置对其进行调试。当我将配置更改为其他任何内容时,我无法 运行 我的应用程序,因为它无法从库中加载组件所需的必要 JavaScript 文件。
因此,预期的行为:无论我在“ASPNETCORE_ENVIRONMENT”中放入什么 - RCL 中的文件都应该始终加载。他们为什么不应该?
实际行为:使用不同的配置(配置文件)会中断 Razor 组件库加载。
找到了in the ASP.NET core github issues. It's actually mentioned in the docs。
您需要在虚拟主机中启用静态网络资产:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStaticWebAssets(); // <----
webBuilder.UseStartup<Startup>();
});
编辑:注意文档中的注释
Calling UseStaticWebAssets isn't required when running an app from published output (dotnet publish).
今天这让我困惑了几个小时,直到我找到了公认的答案,这让我找到了文档。对于 CORE 6.0
应用程序,情况略有变化:
...static web assets are enabled by default in the Development environment. To support assets in other environments when running from build output, call UseStaticWebAssets on the host builder in
Program.cs
:
builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets();
你还需要调用
app.UseStaticFiles();
从 var app = builder.Build();
app
之后进一步向下