2017-08-17 61 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 :) –