从Razor类库导入.less文件

时间:2019-07-19 14:05:36

标签: asp.net-core less

我创建了一个Razor类库,以便能够在项目中分发一些全局样式和视图,但是我似乎无法从Razor类库中导入.less文件。

在我的RCL中,我有:

Styles
  -Shared
    -layout.less
    -variables.less

在引用RCL的项目中,我有:

Styles
  -main.less

main.less仅具有:

@import "./Shared/variables.less";

当我通过webpack运行构建时,遇到无法解决./Shared/variables.less的错误,但是如果我将RCL中的Shared目录复制到引用它的项目中,则可以正常工作。

我已将RCL的BuildAction设置为Content的.less文件,是否缺少任何内容,或者这是不可能的?

2 个答案:

答案 0 :(得分:1)

这是可能的,但并非专门针对您要在此处执行的操作。 RCL最终是DLL,因此唯一可以包含在其中的就是可以“编译”到其中的东西。我说用引号进行编译,因为静态文件可以作为嵌入式资源包括在内,因此尽管它们本身不是经过编译的,但它们实际上仍被嵌入到生成的DLL中。借助ManifestEmbeddedFileProvider,使用RCL的应用程序可以从这些嵌入式资源中读取它们,就好像它们确实在文件系统中一样。

但是,重要的是,它们不在文件系统上,这意味着使用webpack之类的东西是100%不行的。您实际上需要做的是将Webpack构建为RCL的一部分,然后将生成的静态资源嵌入到RCL中。这样,您的应用程序就可以使用自己的资源来拥有自己的webpack构建,但是您将无法将RCL中的原语与应用程序中的原语结合起来。

答案 1 :(得分:0)

您可以手动管理构建顺序并在构建后运行powershell脚本(确保首先构建正确的dll),然后查询dll并将所需的文件(?)提取到wwwroot中的正确文件夹中,或者在任何位置,在构建Webpack之前。我认为这是在项目建立之后发生的,但是我也不是webpack的专家,而且我实际上还没有尝试过。

从技术上讲,如果您希望将任何静态文件或视图文件嵌入到dll中,也可以选择“嵌入资源”,这就是我过去所做的事情。