【问题标题】:ASP.NET MVC 4 is bundling js files in Debug ModeASP.NET MVC 4 在调试模式下捆绑 js 文件
【发布时间】:2013-05-25 22:09:26
【问题描述】:

“问题在于,默认情况下,asp.net mvc 不会在调试模式下捆绑 css 和 js 文件。但我们的 css 和 js 文件会在调试模式下捆绑。”

由于某种原因,所有的 css 和 js 文件都以调试模式捆绑在一起。几天前就开始了。我们有一个包含多个开发人员的大型团队,很难找出过去几天发生了什么变化,因为有几个更改提交到存储库。但是我没有发现 BundleConfig 和 Global.asax.cs 有任何重大变化。

当应用程序在调试模式下运行时,BundleTable.EnableOptimizations 返回一个 false。

据我了解,当 debug 设置为 true 时,捆绑不会发生。 <compilation debug="true" targetFramework="4.5">

到目前为止,我还没有在 Google 上发现一次出现此问题。这是一个非常独特的问题吗?

理想情况下,我想修复它而不是解决方法。找到原因是这里的实际问题。任何关于我应该从哪里开始寻找修复的指针将不胜感激。谢谢。

编辑:我的问题与ASP.NET MVC 4 app with bundling and minification, why is minification enabled in debug mode? 相似但不完全相同 有人请删除“这个问题在这里可能已经有答案:”标签。 在我的情况下,捆绑路径已经以“~”开头

模板: @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/js")

捆绑配置: bundles.Add(new Bundle("~/Content/css").Include("~/Content/*.css")); bundles.Add(new Bundle("~/bundles/js").Include("~/Scripts/myproj.*"));

【问题讨论】:

  • "当应用程序在调试模式下运行时,BundleTable.EnableOptimizations 返回一个 false" ...这是您要写的内容,因为这是预期的行为(在 DEBUG 中关闭捆绑)
  • 在调试模式下 BundleTable.EnableOptimizations 返回 false。在调试时,我们也会从 BundleTable.EnableOptimizations 得到错误。问题是,默认情况下,asp.net mvc 不会在调试中捆绑 css 和 js 文件。但是我们的 css 和 js 文件被捆绑在一起了。
  • 检查对 web.config 的任何更改,这可能会覆盖一些默认值。
  • 我在 web.config、global.asax 和 bundle 配置中没有发现任何变化。这是最让我吃惊的地方。
  • 不是真的利亚姆。就像其他人一样,您误读了这个问题。

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


【解决方案1】:

就我而言,我曾经使用过

@Scripts.Render("/Bundles/scriptname")

当我用

替换它时
@Scripts.Render("~/Bundles/scriptname")

成功了。 '~' 让一切变得不同。

【讨论】:

  • 在我的例子中是版本号。我已将其从 @Scripts.Render(string.Format("~/bundles/js/script?v={0}", versionNumber)) 更改为 @Scripts.Render("~/bundles/js/script")。以防万一它对某人有帮助。
【解决方案2】:

对我来说,问题在于 web.config 中的“调试”设置为 false

<configuration>
    <system.web>
        <compilation debug="false" targetFramework="4.0" />

【讨论】:

  • 感谢@brettof86 的回复。我的应用程序中的调试设置为 true。
【解决方案3】:

专门尝试在 MVC 之外进行故障排除。

这个问题现在是否超出了您的整个团队或只是您的机器?如果是整个团队,至少您知道更改发生在提交周期的某个地方。

您是否重建了解决方案?清洁得当?您运行的是 IIS、IIS Express 还是 Cassini?您是否绝对确定您在调试器中运行的站点/构建未处于发布模式?您可能正在调试未通过构建管道修改的特定构建(失败的构建肯定属于此类别)。

我使用的是 VS 2010 和 MVC 4,默认情况下处于调试模式,我完全看不到捆绑。我不必明确设置任何东西。如果您看到不同的东西,显然必须考虑到它,因为这不是正常行为。

我觉得你最好的方法是最难的:解除你的提交。复制您的工作目录并恢复到发生这种情况之前的某个时间。验证此版本中的问题不会发生,不要只是假设。现在在那个时间点和现在之间的中间签出一个提交。再次测试。如果构建仍然良好,请将时间减半并重复。一旦你遇到了这个问题,你就会知道它被引入的提交介于你最后一个“好”提交和你当前正在测试的提交之间。这种技术极大地简化了将问题隔离到特定提交的过程。我几乎从不一次提交一个,除非我完全不确定代码或者我已经很清楚它可能在哪里。

【讨论】:

  • 不幸的是,这个答案并没有真正帮助我。我遇到了同样的问题 - 使用 VS 2013 Express for Web 和 MVC 5。我只有一台机器,我不能回到以前的工作版本,因为我今天才第一次使用捆绑 -与问题中描述的行为完全相同。
  • @1576573987 - 也许您可以快速说明为什么这个答案对您有帮助?那将不胜感激。非常感谢!!!
  • @1576573987 - 事实上,我刚刚创建了一个全新的项目(使用 MVC 5 模板开箱即用)并注意到那里也有相同的行为。所以我什至从未接触过 web.config、Global.asax 或任何其他文件。所以它看起来更像是开发 PC 上的一个设置,即使项目处于调试模式,它也会强制捆绑切换到缩小。
  • 这只是一系列的猜测
【解决方案4】:

尝试将此添加到您的全局Application_Start()

BundleTable.EnableOptimizations = false;

所以...

protected void Application_Start()
{
     AreaRegistration.RegisterAllAreas();
     WebApiConfig.Register(GlobalConfiguration.Configuration);
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     RouteConfig.RegisterRoutes(RouteTable.Routes);
     BundleConfig.RegisterBundles(BundleTable.Bundles);
     AuthConfig.RegisterAuth();

     BundleTable.EnableOptimizations = false;
}

【讨论】:

  • 您编写的解决方案是在调试模式下捆绑css和js文件。我想我说得不够清楚,因此造成了混乱。在我们的例子中,我们的文件在调试模式下被捆绑,我们不希望这种情况发生。我们没有在系统的任何地方设置BundleTable.EnableOptimizations = true;
  • 哦,我明白了,误读了。尝试将其显式设置为 false。
  • 当我在即时窗口或监视窗口中检查时,BundleTable.EnableOptimizations 的值已经是 false。
  • 谢谢,我正在为单页应用程序使用 asp.net 模板,我必须将其设置为注释它,默认情况下是这样。 // 将 EnableOptimizations 设置为 false 以进行调试。更多信息,`//访问go.microsoft.com/fwlink/?LinkId=301862BundleTable.EnableOptimizations = true;`
猜你喜欢
  • 2013-01-30
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 2013-02-15
  • 2012-09-19
  • 2012-09-19
  • 2012-10-19
相关资源
最近更新 更多