您好我正在尝试为我的应用程序捆绑我的脚本。我的调试工作正常,如果我使用Web.debug发布,一切正常。但是当我使用Web.releas发布时,我的脚本不会加载。一切都在本地工作,只有当我从VS2012发布到Azure时才会停止。以下是我创建捆绑包的方法。
namespace BAT.App_Start
{
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
//BundleTable.EnableOptimizations = true;
bundles.Add(new ScriptBundle("~/Content/MasterCss")
.Include("~/Content/bootstrap.css")
.Include("~/Content/bootstrap-responsive.css")
.Include("~/Content/CSS/site.css"));
bundles.Add(new ScriptBundle("~/Scripts/MasterScripts")
.Include("~/Scripts/jquery-{version}.js")
.Include("~/Scripts/bootstrap.js"));
bundles.Add(new ScriptBundle("~/Scripts/Validation")
.Include("~/Scripts/jquery.validate.js")
.Include("~/Scripts/jquery.validate.unobtrusive.js"));
}
}
}
未注释的行会破坏调试版本
这是我调用捆绑包的布局
@using System.Web.Optimization
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title Business Analysis Tool </title>
@Styles.Render("~/Content/MasterCss")
</head>
<body>
<div class="container-fluid">
<div class="row-fluid"> @RenderPage("~/Views/Shared/_Header.cshtml") </div>
<div class="row-fluid"> @RenderBody() </div>
<div class="row-fluid"> @RenderPage("~/Views/Shared/_Footer.cshtml") </div>
</div>
@Scripts.Render("~/Scripts/MasterScripts")
@RenderSection("scriptholder", false)
</body>
</html>
这是我的Release.Config
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
当我在页面上用CTRL + U检查捆绑的脚本时,这是一个错误的链接 http://bat.azurewebsites.net/Content/MasterCss?v=htASNz4hgFFA40tt0CVZdpwQudN8ZW4429UjRQZQJms1
这似乎与缩小有关。我已经按照一些教程阅读了其他帖子,但他们的解决方案对我不起作用
答案 0 :(得分:5)
这个非常简单的解决方法:
我有以下内容:
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
我的解决方案中还有一个文件夹:
/Content/Css
这就是问题所在,stylebundle与我解决方案中的文件夹同名。
将stylebundle重命名为:
bundles.Add(new StyleBundle("~/scripts/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css"));
和(记住)改变你引用它的位置,_Layout.cshmtl
所以为了清楚说明,如果你的stylebundle名称和解决方案中的实际文件夹相同,那么你就会遇到这个问题。 只需将其命名为不同的东西。
答案 1 :(得分:4)
小错误杀了我,我把我的CSS捆绑为脚本包而不是样式包。
我已经做了很多尝试修复此问题,包括设置源代码控制和构建配置。我的项目从设置为使用git到tfs和所有东西。
答案 2 :(得分:4)
在BundleConfig.cs中我有以下内容:
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/css/bootstrap.css",
"~/Content/css/bootstrap-responsive.css",
"~/Content/css/site.css"));
我实际上必须使用:
bundles.Add(new StyleBundle("~/Styles/css").Include(
"~/Content/css/bootstrap.css",
"~/Content/css/bootstrap-responsive.css",
"~/Content/css/site.css"));
我还必须在_Layout.cshtml
中更新我的CSS样式包的引用@Styles.Render("~/Styles/css")
我在这里找到了这个答案:http://thebeardeveloper.blogspot.com.au/2013/02/403-forbidden-for-css-bundles-in-asp.html
答案 3 :(得分:2)
我遇到了同样的问题,但上述解决方案都没有对我有用。
问题是,我有这样的捆绑:
@Styles.Render("~/Content/css")
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/justified-nav.css",
"~/Content/site.css"));
但是,〜/ Content / css也是一个目录 - 在部署到Azure时崩溃了。我通过在两个位置将〜/ Content / css更改为〜/ Content / mastercss来修复此问题
答案 4 :(得分:1)
发布到Azure时遇到了类似的问题。该错误实际上告诉我jQuery文件格式不正确。 ==&GT;缩小文件。
其他脚本失败,因为未识别jQuery。
我使用的是jQuery 2.0.0(来自NuGet)。在今天升级到2.0.2(来自NuGet)之后,我能够在Release配置下成功发布到Azure。
不确定这是否与您的具体问题相关联,但它解决了我的问题。
答案 5 :(得分:1)
在我缺少样式表的情况下,问题不是由于向Azure发布的变幻莫测,缩小期间的失败或虚拟和真实路径的冲突。
这是由于 Debug 和 Release 之间BundleCollection.Add(Bundle)
的不同行为。
如果您设法执行以下操作(例如,因为您正在使用NuGet中的Durandal并且已经通过WebActivator初始化了多个BundleConfig,并且您自己并没有真正编写任何一个)
bundles.Add(new StyleBundle("/foo").Include("/a.css"));
bundles.Add(new StyleBundle("/foo").Include("/b.css"));
基本上,如果捆绑包不会缩小,则可行:您在Razor页面中获取了/foo/a.css
和/foo/b.css
的元素。
但如果 ,则b.css
无法进入最终的缩小资源。 (或a.css
被取代......我没有注意到......只是想让它发挥作用。)
您可以通过了解加载和使用的顺序来解决此问题:
bundles.Add(new StyleBundle("/foo").Include("/a.css"));
bundles.Add(bundles.GetBundleFor("/foo").Include("/b.css"));
...或者使用不同的命名路径(如果这真的是你的意图),或者改进策略以捆绑初始化(这可能会破坏NuGet更新)。
如果只是愚蠢的文档&#39;对于System.Web.Optimization
类而言实际上很难指定使用相同虚拟路径添加多个包的行为,我们不需要进行此讨论。
答案 6 :(得分:1)
让我们做一些严肃的挖掘。 今天我开始使用Azure,并迅速遇到类似的问题。
样式包的定义如下:
bundles.Add(new StyleBundle("~/Styles/css").Include(
"~/Content/bootstrap.superhero.css",
"~/Content/site.css"));
但是没有正在呈现的CSS。
几乎打开第二个问题后,我意识到,文件bootstrap.superhero.css
在解决方案资源管理器中显示为灰色。在Visual Studio中本地工作的是在Azure中失败,因为该文件尚未在项目中实现。
Tl; dr:右键单击Css文件,然后&#34;包含在项目&#34;
答案 7 :(得分:0)
作为上面提到的答案之一,我已经打了几个小时,我的问题还在于我有一个名为scripts的文件夹,所以我更改了脚本的名称(这是从我的索引视图)
@Scripts.Render("~/Scripts/CircleStats") //this is also a folder in my project, which I think is the problem for azure
到
@Scripts.Render("~/bundles/CircleStats")
它正在发挥作用,希望这能帮助某人
https://forums.asp.net/t/1810635.aspx?403+Access+denied+when+using+Bundling
答案 8 :(得分:0)
就我而言,我的捆绑包的虚拟路径包含.
字符。像这样:
bundles.Add(new ScriptBundle("~/bundles/jquery.loadTemplate").Include(
"~/Scripts/jquery.loadTemplate/*.js");
我用连字符更改了点:
bundles.Add(new ScriptBundle("~/bundles/jquery-loadTemplate").Include(
"~/Scripts/jquery-loadTemplate/*.js");
一切都像魅力一样。
我仍然不确定为什么它可以在我的本地计算机上运行而不能在Azure上运行...