我正在使用ASP.Net Core,打字稿,React和Webpack构建一个Webapp。它称为Ui.WebApp
。 React应用位于Ui.WebApp/ClientApp
,并且webpack将输出构建到Ui.WebApp/ClientApp/dist
。
在我的Startup.cs
中,
app.UseStaticFiles(new StaticFileOptions {
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "ClientApp/dist"))
}
);
这是有效的,即当我在_Layout.cshtml
中将样式加载为<link rel="stylesheet" href="~/main.css" asp-append-version="true" type="text/css" />
并实际位于Ui.WebApp/ClientApp/dist/main.css
中时。它也适用于我作为<script src="~/main.js"></script>
包含的脚本。
现在,我需要在Webpack中构建脚本,并使用名称中的哈希值,即main_968495a262da1789981f.js
。 ASP.Net中的模式是使用<script asp-src-include="~/main_*.js"></script>
。但是,从浏览器查看页面时,没有结果脚本标记,因为我假设ASP.Net找不到与该模式匹配的任何文件(但是我可以在文件浏览器中看到它)。
奇怪的是,当我手动将散列的js文件放入Ui.WebApp/wwwroot
(否则我不会使用)时,脚本标记正确填写了。当我删除文件夹并刷新页面时,他们甚至都呆在那里。
因此,我假设ASP.Net在编译时验证了标记帮助器,因此看不到我在Startup.cs
中所做的配置。
有什么方法可以使ASP.Net在运行时验证标记助手并选择正确的位置?
答案 0 :(得分:0)
我刚遇到这个问题,我想我已经解决了。这里有很多示例显示使用波浪号,但是如果您查看智能提示,它表示该提示与您的Webroot设置有关。因此,您不需要波浪号,实际上,它似乎已将其打破。至少对于.net core 2.1而言,这是正确的。
对于您的示例,我终于使它像这样工作了:
<script asp-src-include="main_*.js"></script>
这是我的第一次尝试,不起作用:
<script type="text/javascript" asp-src-include="~/dist/**/*.js"></script>
但是当更改为它时,确实如此!
<script type="text/javascript" asp-src-include="dist/**/*.js"></script>
希望这可以为其他人节省大量的挫败感。