Cara menambahkan referensi ke System.Web.Optimisasi untuk aplikasi MVC-3-dikonversi-ke-4

458

Saya mencoba menggunakan fitur bundling baru dalam proyek yang baru-baru ini saya konversi dari MVC 3 ke MVC 4 beta. Itu membutuhkan satu baris kode di global.asax BundleTable.Bundles.RegisterTemplateBundles();,, yang memerlukan using System.Web.Optimization;di atas.

Ketika saya melakukan ini, saya mendapatkan garis merah berlekuk yang mengatakan, "Apakah Anda kehilangan referensi perakitan?" Ketika saya mencoba dan menambahkan referensi, dan klik pada tab .NET di dialog, urutkan dari AZ, saya tidak melihat System.Web.Optimization.

Bagaimana saya menambahkan referensi ini ke proyek saya?

Ian Davis
sumber
6
Saya sudah memiliki Optimasi tetapi menyebabkan masalah dengan ScriptBundle yang hanya bisa saya selesaikan setelah mencopot instalasi Opti ... kemudian instal ulang.
Myzifer
1
@Myzifer Anda harus mengirimkan komentar Anda sebagai jawaban. Itu satu-satunya hal yang berhasil bagi saya untuk mendapatkan System.Web.Optimizationsimpul kembali ke Referensi saya.
Snekse
2
@ myzifer Jawaban Anda adalah yang benar untuk perilaku aneh ini. Satu- satunya hal yang akan menyelesaikan masalah ini bagi saya adalah menjalankan nuget cmd line: UnInstall-Package Microsoft.AspNet.Web.Optimization dan kemudian setelah itu menjalankan instalasi: Install-Package Microsoft.AspNet.Web.Optimization. Sudah mencoba menjalankannya selama berminggu-minggu di komputer rumah saya dengan VStudio 2013 & tidak pernah bisa mendapatkannya. Terima kasih banyak.
raddevus
@Myzifer - bekerja untuk saya juga - "Memeriksa" sebuah proyek dari VSOnline dan mengalami kesalahan ini - hapus instalan lalu instal ulang - pekerjaan 20 detik - terima kasih - ini adalah salah satu masalah bodoh yang dapat dengan mudah Anda hilangkan dalam sehari!
Percy

Jawaban:

728

Pembaruan
Versi 1.1.x tersedia, baca catatan rilis: https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization


Paket Microsoft.Web.Optimisasi sekarang sudah usang. Dengan ASP.NET (MVC) 4 dan lebih tinggi, Anda harus menginstal Microsoft ASP.NET Web Optimization Framework:

  • Instal paket dari nuget :

    Install-Package Microsoft.AspNet.Web.Optimization
  • Buat dan konfigurasikan bundel di App_Start \ BundleConfig.cs:

    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles) {
            bundles.Add(new ScriptBundle("~/Scripts/jquery").Include(
                "~/Scripts/Lib/jquery/jquery-{version}.js",
                "~/Scripts/Lib/jquery/jquery.*",
                "~/Scripts/Lib/jquery/jquery-ui-{version}.js")
            );
    
            bundles.Add(new ScriptBundle("~/Scripts/knockout").Include(
                 "~/Scripts/Lib/knockout/knockout-{version}.js",
                 "~/Scripts/Lib/knockout/knockout-deferred-updates.js")
            );
        }
    }
  • Panggil fungsi RegisterBundles () dari Application_Start () di global.asax.cs Anda:

    using System.Web.Optimization;
    
    protected void Application_Start() {
         ...
         BundleConfig.RegisterBundles(BundleTable.Bundles);
         ...
    }
  • Di view.cshtml Anda, sertakan ruang nama Optimasi dan render bundel:

    @using System.Web.Optimization
    
    @Scripts.Render("~/Scripts/jquery")
    @Scripts.Render("~/Scripts/knockout")

Lihat http://www.asp.net/mvc/overview/performance/bundling-and-minification untuk informasi lebih lanjut

mhu
sumber
2
Apakah Anda memerlukan MVC4 untuk menggunakan ini?
FloatLeft
5
Itu tidak ketinggalan zaman. Ini adalah bagaimana saya menggunakannya dengan rilis final Visual Studio 2012 dan ASP.NET (MVC) 4.
mhu
29
Jawaban Anda termasuk "menggunakan System.Web.Optimization;", yang merupakan hal yang ditanyakan oleh si penanya.
davidpricedev
9
@ Dave: Apakah itu baik atau buruk? Untuk memecahkan "referensi perakitan yang hilang" Microsoft.AspNet.Web.Optimisasi harus diinstal sebagaimana disebutkan dalam jawaban.
mhu
6
dalam template MVC default saya bisa menggunakan kelas Script tanpa menambahkan namespace System.Web.Optimization di bagian atas halaman. Tetapi dalam proyek saya saya mendapatkan kesalahan "Script nama tidak ada". Bagaimana saya bisa mengatasinya? Menambahkan namespace ini di web.config tidak membantu. Sunting: solusi reload membantu, maaf :)
Wachburn
83

Dengan versi final yang dirilis dari ASP.Net MVC 4 pendekatannya adalah sebagai berikut:

  • Instal Microsoft.AspNet.Web.Optimisasi via nuget (karena tidak diinstal oleh framework)

    install-package Microsoft.AspNet.Web.Optimization
  • Buat bundel di Global.asax Application_Start:

    var scripts = new ScriptBundle("~/MyBundle");
    scripts.IncludeDirectory("~/Scripts/MyDirectory", "*.js");
    BundleTable.Bundles.Add(scripts);
  • Tambahkan namespace "System.Web.Optimization" ke web.config "Views":

     <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Optimization" />
        </namespaces>
    </pages>
  • Di view.cshtml Anda menambahkan sebuah menyertakan ke bundel yang dibuat pada langkah terakhir:

    @Scripts.Render("~/MyBundle")

Dalam mode debug, semua file skrip di direktori Anda akan ditampilkan secara terpisah; dalam mode rilis mereka akan dibundel dan diperkecil.

Noel Abrahams
sumber
Benar, versi ini memasukkannya. Versi lainnya tidak.
Luke Belbina
1
Saya tidak mengerti mengapa ini tidak berhasil untuk saya. Saya sudah mencoba keduanya dengan cara ini dan untuk membuat bundel di BundleConfig.cs tetapi ketika saya menambahkan @ Styles.Render ("~ / CssBundle") dalam pandangan saya yang saya dapatkan hanyalah <link href = "/ CssBundle" rel = "stylesheet "/> itu memberiku 404. Tahu kenapa?
vsdev
@vsdev Saya tahu ini terlambat 4 tahun, tetapi Anda mungkin harus memeriksa BundleConfig.cs Anda untuk memastikan Anda menambahkannya dengan benar - baris dalam jawaban ini hanya merujuk ".js"file. Di dalam public static void RegisterBundles(BundleCollection bundles) { ... }Anda harus dapat melakukan sesuatu seperti bundles.Add(new StyleBundle("~/CssBundle"));dan itu akan mengambil semua file CSS di CssBundlefolder Anda . Anda tidak ingin ScriptBundleseperti di contoh untuk file CSS.
vapcguy
17

Perbarui (instal ulang) paket dari nuget, Anda dapat menggunakan perintah:

update-Package Microsoft.AspNet.Web.Optimization -reinstall

M. Salah
sumber
14

Dalam kasus saya itu adalah masalah tfs, karena tfs mengecualikan binari, sehingga Nugget PM menemukan nugget terinstal dan tidak memperbarui perpustakaan Jika Anda memiliki masalah serupa:

  • Buka kontrol sumber
  • Arahkan ke .. \ package \ Microsoft.Web.Optimization
  • Tambahkan folder lib (hapus centang pada ekstensi binary yang dikecualikan)
  • Perbarui solusi Anda dan tambahkan referensi dll dari jalur

NB: folder paket berada di level yang sama dengan file yousolution.sln

amina
sumber
11

Menggunakan nuget untuk menghapus instalasi System.Web.Optimation di konsol manajer paket seperti ini:

Uninstall-Paket Microsoft.AspNet.Web.Optimization

Kemudian instal ulang menggunakan:

Instal-Paket Microsoft.AspNet.Web.Optimisasi

Dapat mengatasi masalah ini untuk Anda.

Myzifer
sumber
1
Tidak yakin bagaimana ini menjawab pertanyaan?
TylerD87
@ TylerD87 Sederhana itu memecahkan satu set keadaan tertentu dan saya bukan satu-satunya yang menemukan ini menjadi kasus, jika Anda membaca komentar pada pertanyaan Anda akan melihat Snekse mengatakan pada 29 April '14 pukul 16:39 bahwa mereka harus mengikuti instruksi khusus yang saya berikan dan bahwa di bawah orang lain memposting banyak hal yang sama kemudian dan diangkat.
Myzifer
Mungkin mengedit jawaban Anda sehingga lebih mirip jawaban? Saya bahkan tidak menyadari Anda menjawab pertanyaan atau apa yang Anda sarankan.
TylerD87
@ TylerD87 Pertanyaannya adalah tentang Pengoptimalan dan jawaban saya tentang Pengoptimalan, itu memecahkan masalah yang dirinci dalam pertanyaan dan telah diakui oleh setidaknya 2 orang lain, jika Anda akan menawarkan rincian tentang bagaimana Anda salah memahami jawaban saya dan cara terbaik Saya bisa mengubah / memperbaikinya untuk memberikan jawaban yang lebih luas kepada audiens yang lebih luas maka saya akan dengan senang hati membuat perubahan seperti itu tetapi tanpa kritik yang membangun saya tidak dapat menentukan bagaimana saya dapat meningkatkan diri.
Myzifer
Hai, saya telah menyarankan edit yang membuatnya lebih jelas apa yang saya maksud. Setelah membaca komentar di atas saya melihat ini sebenarnya saran yang berhasil tetapi cara jawaban Anda disajikan tidak jelas tentang apa yang sebenarnya Anda sarankan.
TylerD87
6

Instal dari NUGet melalui Visual Studio Buka Visual Studio 2010, pilih Alat-> Library Package Manager-> Package Manager Console

Ini akan membuka conslve, paste

Install-Package Microsoft.AspNet.Web.Optimization 

dan masuk. dan kamu selesai

Mian
sumber
2

atur di Global.asax application_start (dalam mode RELEASE dll.):

BundleTable.EnableOptimizations = **true**;

untuk mengaktifkan minifikasi dan mengubah ke false dalam mode DEBUG untuk merender semua skrip dan file gaya satu per satu.

zenichi
sumber
5
Lebih mudah untuk mengontrol ini melalui web.config. Jika <compilation debug="true" />diatur (yang cukup standar ketika membangun versi debug), tidak ada optimasi yang dilakukan. Biasanya pengaturan ini dihapus secara otomatis dalam rilis rilis. BundleTable.EnableOptimizationsseharusnya hanya digunakan untuk mengesampingkan web.config. Untuk info lebih lanjut: asp.net/mvc/tutorials/mvc-4/bundling-and-minification (cari "Mengontrol Bundling dan Minifikasi")
mhu
Ini sangat membantu saya, terima kasih. Saya harus menonaktifkannya karena bekerja dengan dotless + RequestReduce membuat bundel berantakan berantakan.
siva.k
Pengaturan ini sangat tergantung pada apakah Anda menggunakan file pra-minified dalam bundel Anda, atau jika Anda menggunakan yang non-minified - tidak terlalu banyak jika Anda berada di Debug atau Rilis, kecuali untuk praktik terbaik untuk masing-masing mode - ex. , Anda dapat memiliki proyek yang Anda kompilasi dalam mode Debug, tetapi di mana Anda memiliki BundleTable.EnableOptimizations = false;karena dalam BundleConfig.cs Anda, Anda menentukan semua file pra-minified dan Anda tidak ingin itu melakukan minimalisasi lain pada mereka.
vapcguy
Ini benar-benar hanya akan menjadi jawaban untuk masalah seseorang jika mereka menggunakan file yang tidak diminimalkan (yaitu file TANPA .min) di BundleConfig.cs mereka. Jika mereka menggunakan file .min dan mengaturnya menjadi true, itu akan memiliki masalah.
vapcguy