我在 BundleConfig.cs 中有这段代码,它只包含一个脚本
bundles.Add(new ScriptBundle("~/bundles/ui-scripts").Include(
"~/Scripts/ui-scripts.js"));
在我的语言环境机器上 ( http://localhost:57210/ ) 这呈现为
<script src="/Scripts/ui-scripts.js"></script>
本地一切正常。
问题是,我们的测试服务器在 Team City 上运行,项目在子文件夹下运行 ( http://testserver.com/myApp/ ),但呈现的输出是相同的
<script src="/Scripts/ui-scripts.js"></script>
这会导致 ui-scripts.js 无法加载 (404),因为它试图从 http://testserver.com/Scripts/ui-scripts.js 加载脚本 当然不存在,因为脚本在 http://testserver.com/ 中myApp/Scripts/ui-scripts.js
我希望框架能够意识到 ~ 指向项目的根,在我的例子中是 http://testserver.com/myApp/
如果我启用优化
BundleTable.EnableOptimizations = true;
输出经过优化,但仍然来自错误的位置,同样,缺少 myApp 子文件夹
<script src="/bundles/ui-scripts?v=mRQZjAGbYccSwhcFn4iouztfiK3Xjwik5TtdvD58fHM1"></script>
另外 , 如果我不使用 bundle,而是在我希望脚本出现的 _Layout.cshtml 中使用,请像这样编写代码
<script src="~/Scripts/ui-scripts.js"></script>
然后路径在服务器上被正确识别到
<script src="/myApp/Scripts/ui-scripts.js"></script>
另外, 如果我在我的本地主机上创建子目录并将应用程序存储在那里,路径将被正确解析。
StyleBundle 也有同样的问题。知道我可以尝试什么吗?
最佳答案
我发现了问题。测试服务器上的 IIS 配置有问题。 该项目实际上为其分配了自己的子域,并且不应该从子目录运行。 摆弄 IIS 设置解决了这个问题。
关于如果项目在子目录中运行,C# MVC StyleBundle 和 ScriptBundle 不会呈现正确的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41424429/