C#Bundle无法在我的服务器上运行

时间:2016-11-26 11:45:35

标签: c# asp.net-mvc iis bundle

我知道有很多关于这个主题的话题,但我想我已经读完了所有这些。由于我仍然无法解决我的问题,所以我写了自己的主题。

这是我的BundleConfig文件:

public static void RegisterBundles(BundleCollection bundles)
{
    var scriptBundle = new ScriptBundle("~/bundles/layoutJS")
        .Include(
            "~/Scripts/jquery-1.11.2.js"
            , "~/Scripts/jquery-ui.js"
            , "~/Scripts/jquery.stellar.js"
            , "~/Scripts/jquery.velocity.js"
            , "~/Scripts/jquery.tubular.1.0.custom.js"
            , "~/Scripts/helper.js"
            , "~/Scripts/Style/Plugins/popup.js"
            , "~/Scripts/Style/Plugins/select.js"
            , "~/Scripts/Style/Plugins/jQuery/cnil.js"
            , "~/Scripts/Style/layout.js"
        );

    scriptBundle.Orderer = new BundleOrderer();
    bundles.Add(scriptBundle);

    var cssBundle = new StyleBundle("~/bundles/layoutCSS")
        .Include(
            "~/Content/Style/Font-Awesome/font-awesome.css"
            , "~/Content/Style/Jquery-ui/jquery-ui.css"
            , "~/Content/Style/Jquery-ui/jquery-ui.structure.css"
            , "~/Content/Style/Jquery-ui/jquery-ui.theme.css"
        );
    cssBundle.Orderer = new BundleOrderer();
    bundles.Add(cssBundle);
}

我没有这一行:

BundleTable.EnableOptimizations = true;

因为我有 web.config 这样做。这是我的web.config的一部分(仅用于localy)

<system.web>
    <compilation targetFramework="4.5.1" debug="true" />
</system.web>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

以下是用于我的舞台服务器的 web.release.config

<system.web xdt:Transform="Replace">
    <compilation targetFramework="4.5.1" debug="false"/>
</system.web>

最后在我的 _layout.cshtml 中,我像这样渲染我的包:

@Styles.Render("~/bundles/layoutCSS")
@Scripts.Render("~/bundles/layoutJS")

所以我觉得我没事,但......不是:(如果我在本地运行我的网站,无论是调试还是发布配置,行为都行,我的所有脚本和样式都是礼物,没有错误在Chrome控制台中。

但是当我在我的服务器上部署时......它已经坏了: - 首先,我在源代码中的bundle上没有版本号 - 第二个显然我每个捆绑都有404 ...

我服务器的IIS上有什么问题吗? 我错过了什么吗?

非常感谢你的未来答案!

编辑:捆绑注册:

protected void Application_Start()
{
    Bootstraper.Run();

    var unitOfWork = (IUnitOfWork)Bootstraper.GetInstance<IUnitOfWork>();
    var cache = (ICacheManager) Bootstraper.GetInstance<ICacheManager>();

    MvcHandler.DisableMvcResponseHeader = true;

    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes, unitOfWork.RouteRepository, cache);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

2 个答案:

答案 0 :(得分:0)

更新您的web.config,更改以下<system.webServer>部分:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="BundleModule" />
        <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
    </modules>
</system.webServer>

答案 1 :(得分:0)

Aaaaaaalright,实际上一切都好。唯一的问题是我的脚本文件夹中有一个目录为空,所以它没有被部署...不幸的是我在模式中有一个规则用于制作一些包。所以它打破了所有其他捆绑包。

感谢@Vivien Chevallier的回答。