【问题标题】:Can't Reference Static Files From RCL无法从 RCL 引用静态文件
【发布时间】:2020-04-13 08:40:15
【问题描述】:

我正在开发一个 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 文件:

&lt;scipt src="_content/Components/js/main.js"&gt;&lt;/script&gt; &lt;&lt;--- NOT WORKING

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

请注意,我可以通过这样做来引用客户端项目中的 main.js 文件

&lt;script src="js/main.js"&gt;&lt;/script&gt; &lt;&lt;&lt;--- WORKS

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

有什么问题?

【问题讨论】:

  • 这是什么奇怪的要求——为什么你要在服务器项目中使用 RCL 中的 JS 文件,而服务器项目正在为 Blazor Webassembly 客户端提供服务——当然你想使用 RCL客户项目中的资产,不是吗?
  • 这是一个公平的问题——我实际上并没有创建项目结构和设置,但我相信它是这样设置的,以便能够在服务器模式和客户端(webassembly)之间动态切换只需分别注入 blazor.server.js 或 blazor.webassembly.js 文件。这是为了支持不支持 WebAssembly 的 IE11。
  • 添加您正在使用的版本可能会有所帮助。我刚刚创建了一个新的 Blazor WebAssembly(客户端)项目,which refer to a RCL project,它可以工作(即can open the file)。
  • 另外,请确保您有正确的 {library_name} 作为您的组件 RCL 项目的程序集名称:imgur.com/NtgnzR2
  • 我会咨询项目模板的作者,他们一定有同样的问题

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


【解决方案1】:

根据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 是我所缺少的。我不确定我是否只是在文档中错过了它,或者他们最近是否更新了它以包含它,但无论哪种方式都为我修复了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    相关资源
    最近更新 更多