Blazor服务器应用程序无法访问子项目的静态内容

时间:2020-09-03 11:44:10

标签: javascript asp.net-core blazor staticresource

我已经创建

  • 一个Blazor Server应用(BlazorServerApp)(。Net Core 3.1)
  • .NET标准类库(MyClassLibrary

我已经将MyClassLibrary项目添加到BlazorServerApp的依赖项中。然后,我将wwwroot文件夹添加到MyClassLibrary项目中,并将test.js文件添加到该文件夹​​中。

我已经如下编辑MyClassLibrary项目文件:

<Project Sdk="Microsoft.NET.Sdk">    
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AssemblyName>MyClassLibrary</AssemblyName>
    <RootNamespace>MyClassLibrary</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <EmbeddedResource Include="wwwroot\**\*.js" LogicalName="blazor:js:%(RecursiveDir)%(Filename)%(Extension)" />
  </ItemGroup>    
</Project>

Blazor Web应用程序在“启动”中调用UseStaticFiles方法,该方法可以提供静态文件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapBlazorHub();
        endpoints.MapFallbackToPage("/_Host");
    });
}

我在test.js(BlazorServerApp项目)中将<script src="_content/MyClassLibrary/test.js"></script>添加为_Host.cshtml

@page "/"
@namespace BlazorServerApp.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
    Layout = null;
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>BlazorServerApp</title>
    <base href="~/" />
    <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
    <link href="css/site.css" rel="stylesheet" />
</head>
<body>
    <app>
        <component type="typeof(App)" render-mode="ServerPrerendered" />
    </app>

    <div id="blazor-error-ui">
        <environment include="Staging,Production">
            An error has occurred. This application may no longer respond until reloaded.
        </environment>
        <environment include="Development">
            An unhandled exception has occurred. See browser dev tools for details.
        </environment>
        <a href="" class="reload">Reload</a>
        <a class="dismiss">?</a>
    </div>

    <script src="_framework/blazor.server.js"></script>
    <script src="_content/MyClassLibrary/test.js"></script>
</body>
</html>

但是,当我运行BlazorServerApp项目时,该错误出现在浏览器中:

GET https://localhost:5001/_content/MyClassLibrary/test.js net::ERR_ABORTED 404

Developer Console of the Browser

也就是说,Web应用程序在指定路径上找不到这样的资源。

任何人都可以解释为什么会发生这种情况,以及需要做些什么才能使应用程序访问其他从属项目(在我的情况下是net标准类库)中的静态资源(例如js或css)吗?

1 个答案:

答案 0 :(得分:1)

打开组件项目属性,然后转到“包”选项卡。

您必须在Package ID中设置一个值

然后您使用此ID指定路径

<script src="_content/package_id/test.js"></script>