Cómo agregar referencias a System.Web.Optimization para la aplicación MVC-3-convert-to-4


458

Estoy tratando de usar la nueva función de agrupación en un proyecto que convertí recientemente de MVC 3 a MVC 4 beta. Requiere una línea de código en global.asax BundleTable.Bundles.RegisterTemplateBundles();, que requiere using System.Web.Optimization;en la parte superior.

Cuando hago esto, obtengo las líneas onduladas rojas que dicen: "¿Te falta una referencia de ensamblaje?" Cuando intento agregar una referencia y hago clic en la pestaña .NET en el cuadro de diálogo, ordenar desde AZ, no veo System.Web.Optimization.

¿Cómo agrego esta referencia a mi proyecto?


66
Ya tenía Optimización, pero estaba causando un problema con el ScriptBundle que solo pude resolver después de desinstalar Opti ... luego reinstalarlo.
Myzifer

1
@Myzifer Debes enviar tu comentario como respuesta. Fue lo único que funcionó para mí para recuperar el System.Web.Optimizationnodo en mis referencias.
Snekse

2
@myzifer Su respuesta es la correcta para este comportamiento extraño. Lo único que resolvería este problema para mí es ejecutar la línea nuget cmd: UnInstall-Package Microsoft.AspNet.Web.Optimization y luego, inmediatamente después de ejecutar la instalación: Install-Package Microsoft.AspNet.Web.Optimization. Intenté hacer que esto funcionara durante semanas en la computadora de mi casa con VStudio 2013 y nunca pude conseguirlo. Muchas gracias.
raddevus

@Myzifer - también funcionó para mí - "Desprotegí" un proyecto de VSOnline y tuve este error - desinstalar y luego reinstalar - 20 segundos de trabajo - gracias - ¡este es uno de esos problemas estúpidos que fácilmente puede perder un día!
Percy

Respuestas:


728

La
versión de actualización 1.1.x está disponible, lea las notas de la versión: https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization


El paquete Microsoft.Web.Optimization ahora está obsoleto. Con ASP.NET (MVC) 4 y superior, debe instalar Microsoft ASP.NET Web Optimization Framework:

  • Instale el paquete desde nuget :

    Install-Package Microsoft.AspNet.Web.Optimization
  • Cree y configure paquetes en 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")
            );
        }
    }
  • Llame a la función RegisterBundles () desde Application_Start () en su global.asax.cs:

    using System.Web.Optimization;
    
    protected void Application_Start() {
         ...
         BundleConfig.RegisterBundles(BundleTable.Bundles);
         ...
    }
  • En su view.cshtml incluya el espacio de nombres de Optimización y renderice los paquetes:

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

Consulte http://www.asp.net/mvc/overview/performance/bundling-and-minification para obtener más información.


2
¿Necesitas MVC4 para usar esto?
FloatLeft

55
No está desactualizado. Así es como lo uso con las versiones finales de Visual Studio 2012 y ASP.NET (MVC) 4.
mhu

29
Su respuesta incluye "usar System.Web.Optimization;", que es exactamente lo que el interlocutor pregunta.
davidpricedev

99
@dave: ¿Eso es bueno o malo? Para resolver la "referencia de ensamblaje faltante", Microsoft.AspNet.Web.Optimization debe instalarse como se menciona en la respuesta.
mhu

66
en la plantilla MVC predeterminada, podría usar la clase Scripts sin agregar el espacio de nombres System.Web.Optimization en la parte superior de la página. Pero en mi proyecto recibo el error "el nombre Scripts no existe". ¿Cómo puedo resolver eso? Agregar este espacio de nombres en web.config no ayudó. Editar: la solución de recarga ayudó, lo siento :)
Wachburn

83

Con la versión final lanzada de ASP.Net MVC 4, el enfoque es el siguiente:

  • Instale Microsoft.AspNet.Web.Optimization a través de nuget (ya que el marco no lo instala)

    install-package Microsoft.AspNet.Web.Optimization
  • Cree el paquete en Global.asax Application_Start:

    var scripts = new ScriptBundle("~/MyBundle");
    scripts.IncludeDirectory("~/Scripts/MyDirectory", "*.js");
    BundleTable.Bundles.Add(scripts);
  • Agregue el espacio de nombres "System.Web.Optimization" al "Vistas" web.config:

     <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Optimization" />
        </namespaces>
    </pages>
  • En su view.cshtml agregue una inclusión al paquete creado en el último paso:

    @Scripts.Render("~/MyBundle")

En modo de depuración, todos los archivos de script en su directorio se renderizarán individualmente; en el modo de lanzamiento serán agrupados y minificados.


Correcto, esta versión lo incluye. La otra versión no.
Luke Belbina

1
No puedo entender por qué esto no funciona para mí. Lo intenté de esta manera y para crear el paquete en BundleConfig.cs, pero cuando agrego @ Styles.Render ("~ / CssBundle") en mi vista, todo lo que obtengo es <link href = "/ CssBundle" rel = "stylesheet "/> eso me da 404. ¿Alguna idea de por qué?
vsdev

@vsdev Sé que esto es 4 años demasiado tarde, pero es posible que tenga que verificar su BundleConfig.cs para asegurarse de que lo está agregando correctamente: la línea en esta respuesta solo hace referencia a ".js"archivos. En el interior public static void RegisterBundles(BundleCollection bundles) { ... }, deberías poder hacer algo así bundles.Add(new StyleBundle("~/CssBundle"));y tomaría todos los archivos CSS de tu CssBundlecarpeta. No desea ScriptBundleque tenga en el ejemplo para archivos CSS.
vapcguy

17

Actualice (reinstale) el paquete desde nuget, puede usar el comando:

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


14

En mi caso, fue un problema de tfs, ya que tfs excluye binarios, por lo que el PM de Nugget encuentra el nugget instalado y no actualiza la biblioteca. Si tiene un problema similar:

  • Ir al control de fuente
  • Vaya a .. \ packages \ Microsoft.Web.Optimization
  • Agregar carpeta lib (desmarque las extensiones binarias excluir)
  • Actualice su solución y agregue la referencia dll de la ruta

NB: la carpeta del paquete está en el mismo nivel del archivo yousolution.sln


11

Usando nuget para desinstalar System.Web.Optimization en la consola del administrador de paquetes de esta manera:

Paquete de desinstalación Microsoft.AspNet.Web.Optimization

Luego reinstalar usando:

Install-Package Microsoft.AspNet.Web.Optimization

Puede resolver este problema por ti.


1
¿No está seguro de cómo responde esto a la pregunta?
TylerD87

@ TylerD87 Simple resuelve un conjunto particular de circunstancias y no soy el único que descubrió que este es el caso, si lees los comentarios sobre la pregunta, notarás que Snekse dijo el 29 de abril de 2014 a las 16:39 que tenían que seguir las instrucciones particulares que di y que debajo alguien más publicó lo mismo mucho más tarde y fue votado.
Myzifer

¿Quizás edite su respuesta para que parezca más una respuesta? Ni siquiera me di cuenta de que estabas respondiendo la pregunta o lo que estabas sugiriendo.
TylerD87

@ TylerD87 La pregunta fue sobre Optimización y mi respuesta fue sobre Optimización, resuelve el problema detallado en la pregunta y ha sido reconocido por al menos otros 2, si ofreciera detalles sobre cómo ha entendido mal mi respuesta y cuál es la mejor manera Podría alterarlo / enmendarlo para proporcionar a un público más amplio una respuesta más clara, entonces estaría feliz de hacer tales cambios, pero sin una crítica constructiva no puedo determinar cómo podría mejorar.
Myzifer

Hola, he sugerido una edición que aclara a qué me refería. Después de leer los comentarios en la parte superior, veo que esta es realmente la sugerencia que funcionó, pero la forma en que se presentó su respuesta no estaba clara sobre lo que realmente estaba sugiriendo.
TylerD87

6

Instálelo desde NUGet a través de Visual Studio Abra Visual Studio 2010, seleccione Herramientas-> Biblioteca Package Manager-> Package Manager Console

Esto abrirá el conslve, pega

Install-Package Microsoft.AspNet.Web.Optimization 

y entra. y ya terminaste


2

establecido en Global.asax application_start (en modo RELEASE, etc.):

BundleTable.EnableOptimizations = **true**;

para habilitar la minificación y cambiar a falso en modo DEPURAR para representar todos los archivos de script y de estilo individualmente.


55
Es más fácil controlar esto a través de web.config. Si <compilation debug="true" />se establece (que es bastante estándar cuando se crea una versión de depuración), no se realiza ninguna optimización. Normalmente, esta configuración se elimina automáticamente en una versión de lanzamiento. BundleTable.EnableOptimizationssolo debe usarse para anular el archivo web.config. Para más información: asp.net/mvc/tutorials/mvc-4/bundling-and-minification (busque "Controlling Bundling and Minification")
mhu

Esto me ayudó mucho, gracias. Tuve que desactivarlo porque trabajar con dotless + RequestReduce estaba haciendo que los paquetes se complicaran.
siva.k

Esta configuración realmente depende de si está usando archivos preminificados en sus paquetes, o si está usando archivos no minificados, no tanto si está en Debug o Release, excepto por las mejores prácticas para cada uno de esos modos, por ejemplo. , puede tener un proyecto que está compilando en modo de depuración, pero donde lo tiene BundleTable.EnableOptimizations = false;porque en su BundleConfig.cs, está especificando todos los archivos preminificados y no desea que haga otra minimización en ellos.
vapcguy

Esto realmente solo sería la respuesta al problema de alguien si estuviera usando archivos no minimizados previamente (es decir, archivos SIN .min) en su BundleConfig.cs. Si usaran archivos .min y lo configuraran como verdadero, tendría problemas.
vapcguy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.