我有一个razor类库,其中包含wwwroot文件夹和一些静态资产(我们称其为MyWeb.Reports项目,因为它将用于使用razor作为生成器来创建静态HTML报告)。
我还拥有使用该dll的asp.net核心托管应用程序(简称为MyWeb)(引用首先提到了Visual Studio-MyWeb.Reports内部的项目)。类库的目的是生成静态HTML文件(它呈现剃刀组件)
我希望能够将HTML内部的CSS呈现为内联字符串,因为HTML文件必须是标准文件(一旦呈现html,就不会再向任何服务器发出其他请求了。)
我的想法是在剃刀组件中使用类似File.ReadAllText(“〜/ styles.css”)这样的东西。 如果styles.css位于asp.net核心Web应用程序的wwwroot文件夹中,则将起作用。
在Web应用程序内部具有组件库的CSS,而在类库内部具有组件的CSS感觉很奇怪。
请记住,我不是在这里创建Web应用程序的(Web应用程序项目中没有组件)。 只是为了调用Web.Reports.dll即可生成HTML,而MyWeb只是具有将返回生成的字符串(流)的控制器。
是否可以将wwwroot从引用的项目复制到实际托管的项目中?
答案 0 :(得分:1)
本文https://dotnetstories.com/blog/How-to-Include-static-files-in-a-Razor-library-en-7156675136介绍了如何从Razor类库访问文件。
在您的剃须刀类库csproj中:
示例:
<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>
然后您可以执行以下操作:
var assembly = typeof(Library.Class1).Assembly;
var filePaths = assembly.GetManifestResourceNames().Where(rnn => rnn.Contains("wwwroot"));
foreach (var path in filePaths)
{
Console.WriteLine(path);
}