Razor类库是否也可以打包静态文件(js,css等)?

可能已经重复了这个 ,但由于那篇文章没有任何答案,我发布了这个问题。

新的Razor类库非常棒,但它无法打包库文件(如jQuery,共享CSS)。

我可以在多个Razor Page项目中重复使用CSS,使用Razor类库或其他任何东西(我的目的是,多个网站使用相同的CSS,并且单个更改适用于所有项目)。

我尝试在Razor类库项目中创建文件夹wwwroot ,但它没有按预期工作(我可以理解为什么)。

您需要将静态资源嵌入Razor类库程序集中。 我认为获得如何操作的最佳方法是查看ASP.NET Identity UI源代码 。

您应该采取以下4个步骤来嵌入您的资产并为其提供服务。

  1. 编辑Razor类库的csproj文件并添加以下行。

       .... true ....   ....     .....      
  2. 在Razor类库中,创建以下类来提供和路由资产。 (它假设您的资产位于wwwroot文件夹)

     public class UIConfigureOptions : IPostConfigureOptions { public UIConfigureOptions(IHostingEnvironment environment) { Environment = environment; } public IHostingEnvironment Environment { get; } public void PostConfigure(string name, StaticFileOptions options) { name = name ?? throw new ArgumentNullException(nameof(name)); options = options ?? throw new ArgumentNullException(nameof(options)); // Basic initialization in case the options weren't initialized by any other component options.ContentTypeProvider = options.ContentTypeProvider ?? new FileExtensionContentTypeProvider(); if (options.FileProvider == null && Environment.WebRootFileProvider == null) { throw new InvalidOperationException("Missing FileProvider."); } options.FileProvider = options.FileProvider ?? Environment.WebRootFileProvider; var basePath = "wwwroot"; var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, basePath); options.FileProvider = new CompositeFileProvider(options.FileProvider, filesProvider); } } 
  3. 使依赖Web应用程序使用Razor Class Library路由器。 在Startup Class的ConfigureServices方法中,添加以下行。

     services.ConfigureOptions(typeof(UIConfigureOptions)); 
  4. 所以,现在您可以添加对文件的引用。 (我们假设它位于wwwroot / js / app.bundle.js)。