2017-08-17 57 views
0

好吧,我一直在使用C#捆绑来缩小和组合脚本和CSS。将附加文件添加到C#脚本和CSS捆绑

但我不知道如何将脚本附加到已创建的包。

我试图追加到捆绑包,因为不是所有脚本都在同一个文件中找到,因为我正在使用visual studio中的nopcommerce解决方案。所以脚本被添加到整个解决方案中。

这里是束代码:

bundles.Add(new ScriptBundle("~/Content/themes/base/js/scripts/footeroptimized").Include(
    "~/Themes/MyTheme/Content/js/bootstrap.min.js", 
    "~/Scripts/jquery.validate.min.js", 
    "~/Scripts/jquery.validate.unobtrusive.min.js", 
    "~/Scripts/public.common.min.js", 
    "~/Themes/MyTheme/Content/js/readmore.min.js")); 

我想也许我可以用束.Add()功能,但我得到一个错误:

bundles.Add("~/Themes/MyTheme/Content/js/global.min.js")); 

的错误是:“无法从字符串转换成system.web.optimization.bundle“

我找不到任何解释为什么即时通知该错误。

而且我已经添加了using语句优化@using System.Web.Optimization;

任何人都知道如何添加到已经创建了一个包。

UPDATE:

我也曾尝试以下,但它不工作:

var footerScriptBundle = new ScriptBundle("~/Content/themes/base/js/scripts/footeroptimized"); 
footerScriptBundle.Include(
    "~/Themes/MyTheme/Content/js/bootstrap.min.js", 
    "~/Scripts/jquery.validate.min.js", 
    "~/Scripts/jquery.validate.unobtrusive.min.js", 
    "~/Scripts/public.common.min.js", 
    "~/Themes/MyTheme/Content/js/readmore.min.js"); 

footerScriptBundle.Include("~/Themes/MyTheme/Content/js/global.min.js"); 

干杯

+0

您何时试图将新脚本添加到捆绑包中?捆绑注册只发生*一次*。在首次创建它之后修改它是没有意义的。你为什么不知道在编译时包的内容应该是什么? – ErikE

+0

@ErikE我想创建的包的内容位于nopcommerce解决方案中的多个文件中。 因此,一些文件在插件中,一些在nop.web 因此,这些文件遍布全球。 –

+0

这些文件的位置与任何东西有什么关系?为什么你不能在一个地方指定文件?第一次创建ScriptBundle的同时添加'global.min.js'。 – ErikE

回答

1

你所描述的使用情况是不适合包。您无法在运行时修改软件包,即使可以,也没有必要这么做。

想一想。您访问了一个页面,并请求并接收浏览器缓存的包abc.js。然后,您访问另一个页面,该页面也要求abc.js,只有您希望内容有所不同。除此之外,浏览器不会要求输入文件,而是会重新使用旧文件,因为它已被缓存。捆绑包用于避免在多个页面上始终需要发送文件。

如果您确实需要捆绑其他文件,那么您需要将不同的文件放入自己的捆绑包中,并在每个页面上请求两个捆绑包,或为每个不同的场景创建一个捆绑包,一个包含所有基础文件加上站点区域特定的文件。

但是,如果只需要一个额外的文件,并且您试图添加到该文件夹​​中的文件仅用于单个页面,那么您做错了。该文件根本不属于捆绑软件!只需像往常一样提供服务,使用正常的<script><link>标签。即使你有多个文件,如果它们只用于一个页面,也许你可以将它们合并成一个(非捆绑的)文件。或者如上面所建议的那样,为这几个文件创建一个特殊的包,并且包含或不包含它作为第二个单独的包。

浏览器的额外开销不得不请求两个对象,一个包和一个页面特定的JavaScript或第二个包,并不是那么大。尝试以这种方式构建捆绑包时,你不会获得太多价值,而这样做会令人头痛的噩梦般的比例。不要这样做。

有一天使用HTTP 2.0,我们可能会忘记绑定,因为浏览器可能会用单个请求请求多个文件,然后通过单个响应接收所有答案。在这一点上,缩小仍然很重要,但我们会完全放弃捆绑,因为它们的好处将通过协议本身完全实现。仍然可能存在多个请求,这些请求沿请求可以从中被服务的线路分割,例如对于可以从CDN提供的所有静态内容(图像,视频,样式表,JavaScript等)的一个请求,以及一个请求适用于所有动态内容。

+0

非常感谢ErikE的解释。这似乎是有道理的。 我会在一两周内不回答这个问题,只是在有人遇到过这种情况时才会这样做。感谢您的帮助m8 :) –