10

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

这是我在页面http://bat.azurewebsites.net/Content/MasterCss?v=htASNz4hgFFA40tt0CVZdpwQudN8ZW4429UjRQZQJms1上使用 CTRL+U 检查捆绑脚本时出现错误的链接

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

4

9 回答 9

5

非常简单的解决方法:

我有以下内容:

bundles.Add(new StyleBundle("~/Content/css").Include(
                  "~/Content/bootstrap.css",
                  "~/Content/site.css"));

我的解决方案中还有一个文件夹:

/Content/Css

这就是问题所在,stylebundle 与我的解决方案中的文件夹同名。

将样式包重命名为:

 bundles.Add(new StyleBundle("~/scripts/css").Include(
                  "~/Content/bootstrap.css",
                  "~/Content/site.css"));

和(记住)改变你引用它的位置,_Layout.cshmtl

因此,为了清楚起见,如果您的 stylebundle 名称与解决方案中的实际文件夹相同,那么您将遇到此问题。只需将其命名为不同的名称。

于 2014-10-20T19:20:56.047 回答
4

小错误杀死了我,我将我的 css 捆绑为脚本包而不是样式包。

我已经做了很多尝试来解决这个问题,包括设置源代码控制和构建配置。我的项目从设置为使用 git 到 tfs 和一切。

于 2013-07-07T09:50:43.347 回答
4

In BundleConfig.cs I had the following:

        bundles.Add(new StyleBundle("~/Content/css").Include(
            "~/Content/css/bootstrap.css",
            "~/Content/css/bootstrap-responsive.css",
            "~/Content/css/site.css"));

I really actually had to use:

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

I also had to update the reference to my CSS Style bundle in _Layout.cshtml

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

I found this answer here: http://thebeardeveloper.blogspot.com.au/2013/02/403-forbidden-for-css-bundles-in-asp.html

于 2014-01-12T02:12:34.657 回答
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 来解决此问题

于 2014-05-12T11:06:57.453 回答
1

在我丢失样式表的情况下,问题不是由于发布到 Azure 的变幻莫测、缩小过程中的失败或虚拟和真实路径冲突。

这是由于DebugReleaseBundleCollection.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 更新)。

如果只有愚蠢的System.Web.Optimization类“文档”实际上费心指定添加具有相同虚拟路径的多个包的行为,我们就不需要进行这个讨论了。

于 2014-08-17T12:11:57.540 回答
1

I had a similar problem when publishing to Azure. The error was actually telling me that the jQuery file was bad formatted. ==> minified file that is.

The other scripts failed because jQuery was not identified.

I was using jQuery 2.0.0 (from NuGet). After upgrading today to 2.0.2 (from NuGet) I was able to publish successful to Azure under Release configuration.

Not sure if this is linked to your specific problem, but it solved mine.

于 2013-06-21T12:02:30.947 回答
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 文件,然后“包含在项目中”

于 2015-06-04T13:18:22.897 回答
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 上运行......

于 2018-07-03T16:56:59.487 回答
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

于 2017-04-07T01:58:11.680 回答