MVC-3-4'e dönüştürülmüş uygulama için System.Web.Optimization'a başvuru ekleme


458

Yakın zamanda MVC 3'ten MVC 4 beta'ya dönüştürdüğüm bir projede yeni paketleme özelliğini kullanmaya çalışıyorum. Global.asax içinde en üstte gerektiren bir kod satırı BundleTable.Bundles.RegisterTemplateBundles();gerektirir using System.Web.Optimization;.

Bunu yaptığımda, "Bir montaj başvurusu eksik mi?" Diyen kırmızı dalgalı çizgiler alıyorum. Başvuruyu ekleyip denediğimde ve iletişim kutusundaki .NET sekmesini tıklattığımda, AZ'den sırala, görmüyorum System.Web.Optimization.

Bu referansı projeme nasıl eklerim?


6
Zaten Optimizasyon vardı ama sadece Opti kaldırdıktan sonra çözebilir ScriptBundle ile ilgili bir soruna neden oldu ... sonra yeniden.
Myzifer

1
@Myzifer Yorumunuzu cevap olarak göndermelisiniz. System.Web.OptimizationDüğümü Referanslarıma geri getirmek benim için işe yarayan tek şeydi .
Snekse

2
@ myzifer Cevabınız bu garip davranış için doğru yanıt. Sadece bana Nuget cmd hattını çalıştığı için bu sorunu çözmek olacaktır şey: UnInstall-Paket Microsoft.AspNet.Web.Optimization sonra sağ bundan sonra yüklemek çalışan: Install-Package Microsoft.AspNet.Web.Optimization. VStudio 2013 ile ev bilgisayarımda haftalarca çalışmayı denedim ve asla alamadım. Çok teşekkürler.
raddevus

@Myzifer - benim için de çalıştı - VSOnline bir proje "Checked" ve bu hatayı vardı - Kaldır sonra yeniden - 20 ikinci iş - teşekkürler - Bu kolayca bir gün kaybedebilirsiniz aptal sorunlardan biridir!
Percy

Yanıtlar:


728


Sürüm 1.1.x'i güncelleyin , sürüm notlarını okuyun: https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization


Microsoft.Web.Optimization paketi artık kullanılmıyor. ASP.NET (MVC) 4 ve üstü ile Microsoft ASP.NET Web Optimizasyon Çerçevesini yüklemelisiniz:

  • Paketi nuget'ten yükleyin :

    Install-Package Microsoft.AspNet.Web.Optimization
  • App_Start \ BundleConfig.cs içinde paket (ler) oluşturun ve yapılandırın:

    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")
            );
        }
    }
  • Global.asax.cs dosyanızdaki Application_Start () öğesinden RegisterBundles () işlevini çağırın:

    using System.Web.Optimization;
    
    protected void Application_Start() {
         ...
         BundleConfig.RegisterBundles(BundleTable.Bundles);
         ...
    }
  • View.cshtml dosyasında Optimizasyon ad alanını ekleyin ve paketleri oluşturun:

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

Daha fazla bilgi için bkz. Http://www.asp.net/mvc/overview/performance/bundling-and-minification


2
Bunu kullanmak için MVC4'e ihtiyacınız var mı?
FloatLeft

5
Güncel değil. Visual Studio 2012 ve ASP.NET (MVC) 4'ün son sürümleriyle bu şekilde kullanıyorum.
mhu

29
Cevabınız, tam olarak anketi yapan kişinin sorduğu şey olan "System.Web.Optimization;
davidpricedev

9
@dave: Bu iyi mi kötü mü? "Eksik montaj başvurusu" çözmek için yanıtta belirtildiği gibi Microsoft.AspNet.Web.Optimization kurulmalıdır.
mhu

6
varsayılan MVC şablonunda sayfanın üstüne System.Web.Optimization ad alanı eklemeden Scripts sınıfını kullanabilirsiniz. Ama benim progect "Ben komut dosyası adı yok" hatası alıyorum. Bunu nasıl çözebilirim? Bu ad alanını web.config dosyasına eklemek yardımcı olmadı. Düzenleme: yeniden yükleme çözümü yardımcı oldu, üzgünüm :)
Wachburn

83

ASP.Net MVC 4'ün son sürümüyle yaklaşım aşağıdaki gibidir:

  • Microsoft.AspNet.Web.Optimization'ı nuget aracılığıyla yükleyin (çerçeve tarafından yüklenmediği için)

    install-package Microsoft.AspNet.Web.Optimization
  • Paketi Global.asax Application_Start içinde oluşturun:

    var scripts = new ScriptBundle("~/MyBundle");
    scripts.IncludeDirectory("~/Scripts/MyDirectory", "*.js");
    BundleTable.Bundles.Add(scripts);
  • "Görünümler" web.config dosyasına "System.Web.Optimization" ad alanını ekleyin:

     <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Optimization" />
        </namespaces>
    </pages>
  • View.cshtml dosyasında, son adımda oluşturulan pakete bir içerme ekleyin:

    @Scripts.Render("~/MyBundle")

Hata ayıklama modunda, dizininizdeki tüm komut dosyaları ayrı ayrı oluşturulur; serbest bırakma modunda paketlenir ve küçültülür.


Doğru, bu sürüm içerir. Diğer sürüm bunu yapmaz.
Luke Belbina

1
Bunun benim için neden işe yaramadığını anlayamıyorum. Ben hem bu şekilde denedim ve BundleConfig.cs içinde paket oluşturmak için ama @ Styles.Render ("~ / CssBundle") benim görüşüme eklemek zaman tüm olsun <link href = "/ CssBundle" rel = "stil sayfası "/> bana 404 veriyor. Neden olduğuna dair bir fikrin var mı?
vsdev

@vsdev Bunun 4 yıl çok geç olduğunu biliyorum, ancak doğru bir şekilde eklediğinizden emin olmak için BundleConfig.cs dosyanızı kontrol etmeniz gerekebilir - bu yanıttaki satır yalnızca referans ".js"dosyalarıdır. İçinde public static void RegisterBundles(BundleCollection bundles) { ... }böyle bir şey yapabilmelisiniz bundles.Add(new StyleBundle("~/CssBundle"));ve CssBundleklasörünüzdeki tüm CSS dosyalarını yakalar. ScriptBundleCSS dosyaları örneğinde olmasını istemezsiniz .
vapcguy

17

Paketi nuget'ten güncelleyin (yeniden yükleyin), şu komutu kullanabilirsiniz:

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


14

Benim durumumda bu bir tfs sorunu, çünkü tfs ikili dosyaları hariç tutuyor, bu nedenle Nugget PM yüklü nugget'ı buluyor ve kütüphaneyi güncellemiyor Benzer bir sorununuz varsa:

  • Kaynak kontrolüne git
  • .. \ Packages \ Microsoft.Web.Optimization adresine gidin.
  • Lib klasörü ekle (ikili uzantıları hariç tut seçeneğinin işaretini kaldırın)
  • Çözümünüzü güncelleyin ve yoldan dll referansını ekleyin

Not: paket klasörü yousolution.sln dosyasının aynı seviyesindedir


11

Paket yöneticisi konsolunda System.Web.Optimization uygulamasını kaldırmak için nuget'i kullanma:

Kaldırma Paketi Microsoft.AspNet.Web.Optimization

Sonra kullanarak yeniden yükleyin:

Yükleme Paketi Microsoft.AspNet.Web.Optimization

Bu sorunu sizin için çözebilir.


1
Bunun soruyu nasıl cevapladığından emin değil misiniz?
TylerD87

@ TylerD87 Basit bir dizi koşulu çözer ve bunun böyle olduğunu düşünen tek kişi ben değilim, eğer soru hakkındaki yorumları okursanız Snekse'in 29 Nisan 'da 16:39 onlar verdiğim belirli talimatları takip etmek gerekiyordu ve aşağıda bir başkası çok daha sonra aynı şeyi yayınladı ve iptal edildi.
Myzifer

Belki cevabınızı daha çok bir cevaba benzeyecek şekilde düzenleyin? Soruyu cevapladığınızı ya da ne önerdiğinizi bile fark etmedim.
TylerD87

@ TylerD87 Soru Optimizasyon hakkındaydı ve cevabım Optimizasyon hakkındaydı, soruda ayrıntılı olarak açıklanan sorunu çözdü ve cevabımı tam olarak nasıl yanlış anladığınızı ve en iyi şekilde nasıl yanlış anladığınıza dair ayrıntılar sunacak olursanız, en az 2 kişi tarafından kabul edildi. Daha geniş bir kitleye daha net bir cevap vermek için değiştirebilir / değiştirebilirim, o zaman bu tür değişiklikler yapmaktan memnuniyet duyarım, ancak yapıcı eleştiri olmadan nasıl gelişebileceğimi belirleyemem.
Myzifer

Merhaba, bahsettiğim şeyi daha net hale getiren bir düzenleme önerdim. En üstteki yorumları okuduktan sonra bu aslında işe yarayan bir öneri olduğunu görüyoruz ama cevabınızın sunulma şekli aslında ne önerdiğiniz konusunda net değildi.
TylerD87

6

Visual Studio ile NUGet'ten yükleyin Visual Studio 2010'u açın, Araçlar-> Kütüphane Paket Yöneticisi-> Paket Yöneticisi Konsolu'nu seçin

Bu conslve açılacak, yapıştırın

Install-Package Microsoft.AspNet.Web.Optimization 

ve girin. ve sen bittin


2

Global.asax application_start öğesinde ayarlanır (RELEASE modunda vb.):

BundleTable.EnableOptimizations = **true**;

tüm komut dosyası ve stil dosyalarını ayrı ayrı oluşturmak için DEBUG modunda küçültmeyi etkinleştirmek ve false olarak değiştirmek .


5
Bunu web.config üzerinden kontrol etmek daha kolaydır. Eğer <compilation debug="true" />(bir hata ayıklama sürümünü oluştururken oldukça standart olan) ayarlanır, hiçbir optimizasyon gerçekleşir. Normalde bu ayar bir sürüm derlemesinde otomatik olarak kaldırılır. BundleTable.EnableOptimizationsyalnızca web.config dosyasını geçersiz kılmak için kullanılmalıdır. Daha fazla bilgi için: asp.net/mvc/tutorials/mvc-4/bundling-and-minification ("Demetleme ve Küçültme Kontrolü" araması)
mhu

Bu bana çok yardımcı oldu, teşekkürler. Ben devre dışı bırakmak zorunda kaldı çünkü dotless + RequestReduce ile çalışmak demetleri karışıklık yapıyorlardı.
siva.k

Bu ayar gerçekten, paketlerinizde önceden küçültülmüş dosyalar kullanıyorsanız veya küçültülmemiş dosyaları kullanıyorsanız - bu modların her biri için en iyi uygulamalar hariç, hata ayıklama veya Sürüm'de olmanız gibi bir durum değildir. , Hata Ayıklama modunda derlediğiniz bir projeniz olabilir, ancak BundleTable.EnableOptimizations = false;BundleConfig.cs dosyasında önceden küçültülmüş tüm dosyaları belirttiğiniz ve üzerinde başka bir simge durumuna küçültmek istemediğiniz için sahip olduğunuz bir projeniz olabilir .
vapcguy

Bu gerçekten sadece bir kişinin sorununa yanıt olarak küçültülmemiş dosyaları (yani .min OLMADAN dosyaları) BundleConfig.cs dosyalarında kullanıyor olsaydı olurdu. Eğer .min dosyaları kullanırlarsa ve true değerine ayarlarlarsa, sorunları olur.
vapcguy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.