.NET 6下RCL静态文件加载异常及Demo示例请求
ASP.NET Core MVC + Razor类库静态文件问题解决
问题背景
我有个基于默认模板的.NET 6 ASP.NET Core MVC应用MyTestApp,同时建了Razor类库MyRazorClassLibrary,把MyTestApp里的css、js、lib文件夹都移到了RCL的wwwroot目录。RCL已经打包成NuGet包加到MyTestApp里,但碰到两个问题:
- Visual Studio 2022里没法以链接引用形式显示这些静态文件
- 本地调试必须先发布
MyTestApp才能加载css、js文件
解决步骤
1. 修正RCL的csproj配置
RCL的静态文件需要明确标记为嵌入式资源,才能在主应用中被访问。替换成以下配置:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <GeneratePackageOnBuild>True</GeneratePackageOnBuild> <!-- 开启资源嵌入 --> <EmbedAllSources>True</EmbedAllSources> </PropertyGroup> <ItemGroup> <SupportedPlatform Include="browser" /> </ItemGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="6.0.16" /> </ItemGroup> <!-- 强制将wwwroot下所有文件设为嵌入式资源 --> <ItemGroup> <EmbeddedResource Include="wwwroot/**/*" /> </ItemGroup> </Project>
2. 主应用MyTestApp配置调整
在Program.cs里确保启用静态文件中间件,这是加载RCL静态文件的基础:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); var app = builder.Build(); // 启用静态文件,自动包含RCL中的嵌入式静态文件 app.UseStaticFiles(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
3. 修复VS链接引用显示问题
- 本地开发优先用项目引用代替NuGet包:右键
MyTestApp-> 添加 -> 项目引用,选中MyRazorClassLibrary,这样VS能直接识别文件引用 - 如果必须用NuGet包,执行
dotnet restore刷新依赖,然后清理并重新生成整个解决方案 - 右键解决方案 -> 清理解决方案,再点击重新生成解决方案
4. 实现本地调试无需发布
- 用项目引用时,RCL的静态文件会自动同步到主应用输出目录,直接启动调试就能访问
- 用NuGet包的话,确保包是本地构建的开发包,主应用引用的是本地包源(比如本地NuGet文件夹)
.NET 6演示项目搭建要点
- 新建.NET 6 ASP.NET Core MVC项目
MyTestApp - 新建.NET 6 Razor类库
MyRazorClassLibrary - 把
MyTestApp的wwwroot/css、js、lib文件夹移到MyRazorClassLibrary的wwwroot下 - 按上面的配置修改RCL的csproj
- 给
MyTestApp添加RCL的项目引用 - 确认
MyTestApp的Program.cs里有app.UseStaticFiles(); - 清理、重新生成后直接启动调试,就能正常加载静态文件
内容的提问来源于stack exchange,提问作者Odrai
相关产品推荐
相关产品推荐

