Blazor 服务器 .NET6 Razor Class 库资产 404 错误
Blazor server .NET6 Razor Class Library assets 404 error
我有一个 Razor Class 库,我在 .NetCore3 和 .NetCore 5 上使用了几个月没有问题。
在最近将我们的 blazor 服务器应用程序和我们的 Razor Class 库更新到 .NetCore 6 之后,我遇到了从 Razor Class 库加载资产的问题。
RCL是通过nuget构建和打包的,例如我可以看到包中的资产;
Web 应用程序已更新为使用单个 program.cs,我正在使用 WebApplication.CreateBuilder()
和我的设置选项。
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
ApplicationName = typeof(Program).Assembly.FullName,
ContentRootPath = Directory.GetCurrentDirectory(),
EnvironmentName = Environments.Development,
WebRootPath = ""
});
加载这些资源时出现 404 错误
<link href="_content/Blurred.Framework.Web.Shared/favicon.ico" type="image/x-icon" rel="icon" />
<link href="_content/Blurred.Framework.Web.Shared/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="_content/Blurred.Framework.Web.Shared/css/site.css" rel="stylesheet" />
我还可以看到 wwwroot 文件夹和相应的资源被加载到 visual studio 中的应用程序项目中。
感觉这是一个配置问题,而不是需要更改的重要内容。
ContentRootPath
或 WebRootPath
的正确设置是什么?
更新
根据this,我需要使用我已经完成的app.UseStaticFiles();
,以及ConfigureWebHostDefaults
中的webBuilder.UseStaticWebAssets();
,这在.NET6中没有使用:(
所以我的问题是 Azure 构建 RCL 解决方案并将 RCL 打包在 nuget 包中的方式。
我必须更新我的构建 YML 以使用 2022 图像,以及 .NET 和 nuget 的 v6.0:
已更改
pool:
vmImage: 'windows-latest'
到
pool:
vmImage: 'windows-2022'
并添加
- task: UseDotNet@2
displayName: 'Use dotnet 6'
inputs:
version: '6.0.x'
并改变了
- task: NuGetToolInstaller@1
到
- task: NuGetToolInstaller@1
inputs:
version: 6.0.0
并改变了
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
vsVersion: '17.0'
到
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
我有同样的错误。
就我而言,我已将 Nuget 包升级到 .NET 6,但同时更改了程序集 (*.dll),因此它与包名称不同。
因此,资源 link 不再起作用。
它指的是程序集名称,而不是 Nuget 包名称。
我把它改成两个名字后,成功了。
我有一个 Razor Class 库,我在 .NetCore3 和 .NetCore 5 上使用了几个月没有问题。
在最近将我们的 blazor 服务器应用程序和我们的 Razor Class 库更新到 .NetCore 6 之后,我遇到了从 Razor Class 库加载资产的问题。
RCL是通过nuget构建和打包的,例如我可以看到包中的资产;
Web 应用程序已更新为使用单个 program.cs,我正在使用 WebApplication.CreateBuilder()
和我的设置选项。
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
ApplicationName = typeof(Program).Assembly.FullName,
ContentRootPath = Directory.GetCurrentDirectory(),
EnvironmentName = Environments.Development,
WebRootPath = ""
});
加载这些资源时出现 404 错误
<link href="_content/Blurred.Framework.Web.Shared/favicon.ico" type="image/x-icon" rel="icon" />
<link href="_content/Blurred.Framework.Web.Shared/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="_content/Blurred.Framework.Web.Shared/css/site.css" rel="stylesheet" />
我还可以看到 wwwroot 文件夹和相应的资源被加载到 visual studio 中的应用程序项目中。
感觉这是一个配置问题,而不是需要更改的重要内容。
ContentRootPath
或 WebRootPath
的正确设置是什么?
更新
根据this,我需要使用我已经完成的app.UseStaticFiles();
,以及ConfigureWebHostDefaults
中的webBuilder.UseStaticWebAssets();
,这在.NET6中没有使用:(
所以我的问题是 Azure 构建 RCL 解决方案并将 RCL 打包在 nuget 包中的方式。
我必须更新我的构建 YML 以使用 2022 图像,以及 .NET 和 nuget 的 v6.0:
已更改
pool:
vmImage: 'windows-latest'
到
pool:
vmImage: 'windows-2022'
并添加
- task: UseDotNet@2
displayName: 'Use dotnet 6'
inputs:
version: '6.0.x'
并改变了
- task: NuGetToolInstaller@1
到
- task: NuGetToolInstaller@1
inputs:
version: 6.0.0
并改变了
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
vsVersion: '17.0'
到
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
我有同样的错误。
就我而言,我已将 Nuget 包升级到 .NET 6,但同时更改了程序集 (*.dll),因此它与包名称不同。 因此,资源 link 不再起作用。 它指的是程序集名称,而不是 Nuget 包名称。
我把它改成两个名字后,成功了。