无法引用RCL中的静态文件

时间:2019-12-20 22:20:45

标签: javascript c# .net-core blazor asp.net-core-3.0

我正在开发Blazor项目,基本上我有3个项目:ClientServerComponentsComponents是一个RCL。结构类似于以下内容:

Components (RCL)
-- wwwroot/
---- js/
------ main.js

Client
-- wwwroot/
---- js/
------ main.js

Server
-- Startup.cs (in Configure(IApplicationBuilder app), calling `app.UseClientSideBlazorFiles<Client.Startup>();`)
-- Pages
---- _Host.cshtml (in this file, referencing a main.js from the Components project like: <script src="_content/Components/js/main.js"></script>)

因此Server项目中的_Host.cshtml是入口点。我正在尝试通过以下方式从 Components RCL中引用main.js文件:

<scipt src="_content/Components/js/main.js"></script> <<--- NOT WORKING

但是它不起作用-我得到了404。我将其基于this,更具体地说是this

请注意,通过执行此操作,我可以在Client项目中引用main.js文件

<script src="js/main.js"></script> <<<--- WORKS

但是不能使用_content/{library_name}/...约定在RCL中引用静态文件。

出什么问题了?

1 个答案:

答案 0 :(得分:2)

对于Microsoft documentation,必须在消费项目的引导文件中包含两行,以使静态文件引用起作用:

1)Startup.cs> Configure()方法必须包含app.UseStaticFiles();

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...

    app.UseStaticFiles(); // <<=== MUST INCLUDE THIS LINE

    ...
}

2)Program.cs> CreateHostBuilder()方法必须包含webBuilder.UseStaticWebAssets();

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStaticWebAssets(); // <<=== MUST INCLUDE THIS LINE
                webBuilder.UseStartup<Startup>();
            });
}

#2是我所缺少的。我不确定我是否只是在文档中错过了这些内容,还是不确定他们是否最近对其进行了更新以包括在内,但是无论哪种方式都可以为我解决。