在我发布到azure之后,捆绑MVC4无法正常工作

时间:2013-06-03 13:53:24

标签: asp.net-mvc-4 azure bundle

您好我正在尝试为我的应用程序捆绑我的脚本。我的调试工作正常,如果我使用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

这似乎与缩小有关。我已经按照一些教程阅读了其他帖子,但他们的解决方案对我不起作用

9 个答案:

答案 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上运行...