在 ASP.NET Core 中使用源自 Microsoft.AspNet.Web.Optimization (.net-framework) 的“脚本”和“样式”

rbr*_*r94 7 c# asp.net-core

我有一个简单的 ASP.NET MVC 项目,需要将其移植到 ASP.NET Core。在视图(.cshtml)中,我发现了类似@Styles.Render("...")or的元素@Scripts.Render("...")

<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>@ViewBag.Title</title>
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/jquery")
        <script src="~/Scripts/script1.js"></script>
    </head>
</html>
Run Code Online (Sandbox Code Playgroud)

我发现它位于基于.NET-Framework 的Microsoft.AspNet.Web.Optimization包中。

如何将其移植到.NET Core中?

Chr*_*att 8

你不能。该包适用于 ASP.NET,而不是 ASP.NET Core。但是,无论如何您都不需要它。这些静态数据的唯一目的是与 ASP.NET MVC 中的捆绑框架结合起来,以便可以引用正确的文件以及缓存清除查询字符串参数。

即使如此,它们也不是绝对必要的,因为包名称实际上最终生成的文件名,因此@Scripts.Render("~/bundles/jquery")和之间唯一的功能区别<script src="~/bundles/jquery"></script>是前者会附加缓存清除参数。

在 ASP.NET Core 中,这一切都发生了变化。严格来说,ASP.NET Core 在静态资源方面是不干涉的。您可以在那里自由选择自己的策略。npmMicrosoft 确实提供了 LibMan 来帮助您,但最常见的是与webpack或 一起使用gulp。在这两种情况下,您都可以通过 config 设置“捆绑包”。对于 LibMan,有一个 libman.json。使用 时,您可以通过或npm进行更多手动操作,具体取决于您是否分别使用或。webpack.config.jsgulpfile.jswebpackgulp

其中任何一个的最终结果都是您的目录中会出现捆绑且缩小的 css/js 文件wwwroot/lib。然后,您只需使用普通的脚本标签引用它们即可:

<script src="~/lib/jquery/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

要添加缓存清除查询,您可以利用以下asp-append-version属性ScriptTagHelper

<script src="~/lib/jquery/jquery.min.js" asp-append-version="true"></script>
Run Code Online (Sandbox Code Playgroud)