Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 4脚本绑定在部署时会导致错误_C#_Javascript_Asp.net Mvc 4_Bundle_Razor 2 - Fatal编程技术网

C# ASP.NET MVC 4脚本绑定在部署时会导致错误

C# ASP.NET MVC 4脚本绑定在部署时会导致错误,c#,javascript,asp.net-mvc-4,bundle,razor-2,C#,Javascript,Asp.net Mvc 4,Bundle,Razor 2,当@Scripts.Render()未绑定脚本时,我的网站在localhost上运行良好。但是,当我将绑定的Javascript部署到服务器时,绑定的Javascript必须包含错误,因为我页面上的所有Javascript都停止工作 这是我的捆绑代码: public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/

@Scripts.Render()
未绑定脚本时,我的网站在localhost上运行良好。但是,当我将绑定的Javascript部署到服务器时,绑定的Javascript必须包含错误,因为我页面上的所有Javascript都停止工作

这是我的捆绑代码:

        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js",
                    "~/Scripts/jquery-migrate-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                        "~/Scripts/jquery-ui-{version}.js",
                        "~/Scripts/jquery-ui.unobtrusive-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

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

            bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
        }
以下是我的渲染代码:

@Styles.Render("~/Content/css")
@Styles.Render("~/Content/themes/base/css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/modernizr")
有人能解释一下我的Javascript在部署时会发生什么吗

谢谢,
Alex.

通常,调试和部署捆绑包之间的唯一区别是,在调试时会关闭优化功能

打开优化功能后,缩小功能可能会突出显示语法错误,如果出现换行,则可以原谅该错误。例如:

var x = 10
var y = 15
未缩小,这可能会起作用-但缩小后的结果是

var x = 10 var y = 15 // SyntaxError: missing ; before statement
这不起作用-您需要缺少的
其中的字符

如果调试脚本,您应该能够看到错误所在。

您还可以将“新脚本包”更改为“新包”:

这将捆绑您的资产而不会缩小规模。我遇到过一些情况,缩小某些库不起作用,因此这仍然允许您将它们包括在捆绑包中。

检查此解决方案
IIS配置>身份验证>右键单击匿名身份验证>单击编辑>检查应用程序池标识

取自。

即使出现错误,缩小“仍有效” 真正的解决办法是:

  • 在发布前排除.min和.map文件
而缩小将起作用。事实上,缩小过程总是有效的

如果“它起作用”,到底是怎么回事:为什么我们会有错误? 在绑定启用的优化时,ASP.Net似乎优先使用.min文件。 因此,它还将集成.min文件中的任何代码,并在不添加换行符的情况下逐个追加每个javascript文件

浏览器无法理解为什么会有潜在评论/* 在最小映射配置之后: //#sourceMappingURL=jquery.history.min.js.map 因为捆绑文件看起来像:

[SOMEJAVASCRIPT OF FILEJAVASCRIPT1 HERE;]
//# sourceMappingURL=jquery.history.min.js.map /* begin of a comment of FILEJAVASCRIPT2 appended (in the bundle) javascript file */
有两种解决方案可以避免该错误:

  • 为无法遵循的javascript文件创建单独的捆绑包(就像不激活捆绑功能一样)
  • 创建不启用缩小的捆绑包(错误)
  • 或者另一种选择:排除所有缩小的文件或具有sourceMappingURL(或更改其源)和.map文件的min.js文件
其目标是强制ASP.Net自行重新生成min文件(并且ASP.Net不会在其生成的文件中生成//sourceMappingUrl,因此它将修复该问题)

因此,真正的问题是当前浏览器中此功能的实现,因为它似乎无法为sourcemapping的注释解析注释。
也许还有另一种方法可以指示浏览器sourceMappingUrl已结束。

我甚至没有想到这一点!这将是一个非常糟糕的缩略符。@BasaratAli不为缩略符的特定实现编写代码。即使您不应该依赖于某个实现,一个需要语言本身不需要的语法的缩略符也是一个糟糕的缩略符。我相信最好的做法是包含分号,而不管缩略符是什么。只要我的两分钱。如果您约束自己维护最佳实践,那么任何库或框架都不会有任何这些问题。注意:如果您指定了一个文件,并且磁盘上存在该文件的.min.js文件,那么您将在捆绑包中获得.min版本,即使您仅使用上面提到的bundle()。我也有同样的问题。我将“newscriptbundle”改为“newbundle”,效果很好。执行此操作时是否会出现性能问题?因为它太烦人了,所以我想到用这种方式添加所有库。最后,在“新捆绑包”中添加一个缩小版本是否有意义?“…ASP.Net在捆绑时似乎优先使用.min文件…”这在我们的代码中隐藏了一个错误。我们对一个.js文件进行了更改,但没有对缩小版进行更改。在测试中,一切都很好(没有捆绑包,使用普通文件),但在生产中(缩小文件),我们一直有问题。有趣的调试!
[SOMEJAVASCRIPT OF FILEJAVASCRIPT1 HERE;]
//# sourceMappingURL=jquery.history.min.js.map /* begin of a comment of FILEJAVASCRIPT2 appended (in the bundle) javascript file */