Asp.net mvc 4 发布到azure后与MVC4绑定不起作用

Asp.net mvc 4 发布到azure后与MVC4绑定不起作用,asp.net-mvc-4,azure,bundle,Asp.net Mvc 4,Azure,Bundle,嗨,我正在尝试为我的应用程序捆绑我的脚本。我的调试工作正常,如果我使用Web发布。调试一切正常。但是当我使用Web.releas发布时,我的脚本不会加载。一切都在本地工作,只有在我从VS2012发布到Azure时才会停止。下面是我创建包的方法 namespace BAT.App_Start { public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) {

嗨,我正在尝试为我的应用程序捆绑我的脚本。我的调试工作正常,如果我使用Web发布。调试一切正常。但是当我使用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>
@使用System.Web.Optimization
@标题业务分析工具
@Styles.Render(“~/Content/MasterCss”)
@RenderPage(“~/Views/Shared/_Header.cshtml”)
@RenderBody()
@RenderPage(“~/Views/Shared/\u Footer.cshtml”)
@Scripts.Render(“~/Scripts/MasterScripts”)
@RenderSection(“脚本持有者”,false)
这是我的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检查捆绑脚本时出现的错误的链接


这似乎与缩小有关。我已经学习了一些教程,并在这里阅读了其他帖子,但是他们的解决方案对我来说不起作用

我在发布到Azure时遇到了类似的问题。错误实际上是告诉我jQuery文件的格式不正确。==>缩小的文件,即

其他脚本失败,因为未标识jQuery

我使用的是jQuery2.0.0(来自NuGet)。今天升级到2.0.2(从NuGet)后,我能够在发布配置下成功发布到Azure


不确定这是否与您的特定问题有关,但它解决了我的问题。

小错误会让我丧命,我将css捆绑为脚本捆绑包,而不是样式捆绑包


为了解决这个问题,我做了很多工作,包括设置源代码管理和构建配置。我的项目从使用git发展到使用tfs和所有东西

        bundles.Add(new StyleBundle("~/Content/css").Include(
            "~/Content/css/bootstrap.css",
            "~/Content/css/bootstrap-responsive.css",
            "~/Content/css/site.css"));
bundles.Add(new StyleBundle("~/Content/css").Include(
                  "~/Content/bootstrap.css",
                  "~/Content/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")

我在这里找到了答案:

我也有同样的问题,但上面的解决方案都不适合我

问题是,我有这样的捆绑:

@Styles.Render("~/Content/css")

bundles.Add(new StyleBundle("~/Content/css").Include(
    "~/Content/bootstrap.css",
    "~/Content/justified-nav.css",
    "~/Content/site.css"));
bundles.Add(new StyleBundle("~/Styles/css").Include(
                  "~/Content/bootstrap.superhero.css",
                  "~/Content/site.css"));

但是,~/Content/css也是一个目录,当部署到Azure时,它会断开。我通过在两个位置将~/Content/css更改为~/Content/mastercss来解决这个问题

在我丢失样式表的情况下,问题并不是由于Azure发布的异常性、缩小过程中的失败或虚拟和真实路径冲突造成的

这是由于调试和发布之间
BundleCollection.Add(Bundle)
的行为不同造成的

如果您成功地执行了以下操作(例如,因为您使用的是NuGet的Durandal,并且WebActivator初始化了多个BundleConfig,而您实际上并没有自己编写任何BundleConfig)

基本上,如果捆绑包不缩小,这是可行的:您可以在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更新)


如果只有
System.Web.Optimization
类的愚蠢的“文档”真正费心指定使用同一虚拟路径添加多个捆绑包的行为,我们就不必进行此讨论了。

对于此问题,非常简单的修复方法:

我有以下几点:

        bundles.Add(new StyleBundle("~/Content/css").Include(
            "~/Content/css/bootstrap.css",
            "~/Content/css/bootstrap-responsive.css",
            "~/Content/css/site.css"));
bundles.Add(new StyleBundle("~/Content/css").Include(
                  "~/Content/bootstrap.css",
                  "~/Content/site.css"));
我的解决方案中还有一个文件夹,位于:

/Content/Css
这就是问题所在,样式包与我的解决方案中的文件夹同名

将样式包重命名为:

 bundles.Add(new StyleBundle("~/scripts/css").Include(
                  "~/Content/bootstrap.css",
                  "~/Content/site.css"));
(记住)要更改引用它的位置,_Layout.cshmtl

因此,为了说明这一点,如果您的样式包名称与解决方案中的实际文件夹相同,那么您将遇到此问题。
简单地给它起个不同的名字。

我们来挖坟墓吧。 今天我开始摆弄Azure,很快就遇到了类似的问题

样式包的定义如下:

@Styles.Render("~/Content/css")

bundles.Add(new StyleBundle("~/Content/css").Include(
    "~/Content/bootstrap.css",
    "~/Content/justified-nav.css",
    "~/Content/site.css"));
bundles.Add(new StyleBundle("~/Styles/css").Include(
                  "~/Content/bootstrap.superhero.css",
                  "~/Content/site.css"));
但是没有呈现css。 在几乎打开第二个问题之后,我意识到,
bootstrap.superhero.css
文件在解决方案资源管理器中变灰了。在VisualStudio中本地工作的内容在Azure中失败,因为该文件尚未在项目中实现


Tl;dr:右键单击Css文件,然后单击“包含在项目中”

作为所提到的答案之一,我已经为此奋斗了几个小时,我的问题还在于我有一个名为“脚本”的文件夹,所以我更改了脚本的名称(这是从我的索引视图)

它正在发挥作用,希望这能帮助一些人


在我的例子中,我的包的虚拟路径包含
字符。比如:

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上工作…

嗨,杰夫。我似乎也处于同样的情况。你对此有什么反馈吗?嗨,没有,我还没找到什么好运气。为了让某些东西正常工作,我使用调试构建发布到Azure。这对我来说是可行的,因为我没有太多的脚本,但我真的很想让捆绑工作正常,如果我有什么想法,我会告诉你,我也看到了同样的问题。如果我发布调试配置文件,它就不能绑定并工作。如果我发布发布概要文件,我的页面上的jquery脚本似乎不再有效。很抱歉延迟尝试,但这对我不起作用。但是谢谢你的回答。