Asp.net core 将wwwroot的内容从类库复制到宿主程序集

Asp.net core 将wwwroot的内容从类库复制到宿主程序集,asp.net-core,razor,blazor,razor-pages,blazor-server-side,Asp.net Core,Razor,Blazor,Razor Pages,Blazor Server Side,我有razor类库,其中包含wwwroot文件夹和一些静态资产(我们称之为MyWeb.Reports项目,因为它将用于使用razor作为生成器创建静态HTML报告) 我还有一个asp.net核心托管应用程序(我们称之为MyWeb),它使用那个dll(引用了VisualStudioMyWeb.Reports中第一次提到的项目)。类库的用途是生成静态HTML文件(它渲染razor组件) 我希望能够以内联字符串的形式呈现HTML中的CSS,因为HTML文件必须是独立的(呈现HTML后,不会向任何服务器

我有razor类库,其中包含wwwroot文件夹和一些静态资产(我们称之为MyWeb.Reports项目,因为它将用于使用razor作为生成器创建静态HTML报告)

我还有一个asp.net核心托管应用程序(我们称之为MyWeb),它使用那个dll(引用了VisualStudioMyWeb.Reports中第一次提到的项目)。类库的用途是生成静态HTML文件(它渲染razor组件)

我希望能够以内联字符串的形式呈现HTML中的CSS,因为HTML文件必须是独立的(呈现HTML后,不会向任何服务器发出额外的请求)

我的想法是在razor组件中使用类似File.ReadAllText(“~/styles.css”)的内容。 如果styles.css位于asp.net核心web应用程序的wwwroot文件夹内,则可以使用该方法

在web应用程序中有组件库的css,而在类库中有组件,这感觉很奇怪

请记住,我不是在这里创建web应用程序(web应用程序项目中没有组件)。 它的porpuse只是调用Web.Reports.dll,它将生成HTML,MyWeb将只有一个控制器,它将返回生成的字符串(流)

是否可以将wwwroot从引用的项目复制到实际托管的项目中?

本文介绍如何从Razor类库访问文件

在razor类库csproj中:

  • 添加GenerateEmbeddedFileManifest标志
  • 请参考Microsoft.Extensions.FileProviders.Embedded
  • 将wwwroot包含为EmbeddedResource
  • 例如:

    <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
        <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.0-rc.2.*" />
        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.0-rc.2.*" PrivateAssets="all" />
        <PackageReference Include="System.Net.Http.Json" Version="5.0.0-rc.2.*" />
        <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.0-rc.2.*" />  
    
      </ItemGroup>
    
      <ItemGroup>
        <EmbeddedResource Include="wwwroot\**\*" />
      </ItemGroup>
    

    您使用的是.Net的哪些版本。这个图书馆是Razor类图书馆吗?由于引用类库资源已更改,Blazor?的版本是什么。检查:ASP.NET Core允许创建RCL,其中包括消费应用程序可用的静态资产。打包RCL时,wwwroot文件夹中的所有附带资产将自动包含在包中。此外,您还可以查看以下文章:。
    var assembly = typeof(Library.Class1).Assembly;
    var filePaths = assembly.GetManifestResourceNames().Where(rnn => rnn.Contains("wwwroot"));
    
    foreach (var path in filePaths)
    {
       Console.WriteLine(path);
    }