Як додати посилання на System.Web.Optimization для додатка MVC-3, перетвореного на 4


458

Я намагаюся використати нову функцію пакетного зв’язку в проекті, який я нещодавно перетворив з MVC 3 в бета-версію MVC 4. Для цього потрібен рядок коду в global.asax BundleTable.Bundles.RegisterTemplateBundles();, який потрібно using System.Web.Optimization;зверху.

Коли я це роблю, я отримую червоні зубчасті рядки, які говорять: "Чи не вистачає вам посилання на збірку?" Коли я намагаюся додати посилання та натискаю на вкладку .NET у діалоговому вікні, сортування від AZ, я не бачу System.Web.Optimization.

Як додати цю посилання до свого проекту?


6
У мене вже була оптимізація, але це спричинило проблему з ScriptBundle, яку я міг вирішити лише після видалення Opti ... а потім перевстановлення.
Myzifer

1
@Myzifer Ви можете надіслати коментар як відповідь. Це було єдине, що працювало для мене, щоб повернути System.Web.Optimizationвузол у мої посилання.
Snekse

2
@myzifer Ваша відповідь є правильною для цієї дивної поведінки. Тільки , що б вирішити цю проблему для мене працює УМК лінії NuGet: UnInstall-пакет Microsoft.AspNet.Web.Optimization , а потім відразу після цього запуску установки: Install-Package Microsoft.AspNet.Web.Optimization. Пробував, щоб це працювало тижнями на моєму домашньому комп’ютері з VStudio 2013, і ніколи не міг його отримати. Дуже дякую.
raddevus

@Myzifer - працював і для мене - "Перевірив" проект від VSOnline і мав цю помилку - видаліть, потім перевстановіть - 20 секундну роботу - дякую - це одна з тих дурних проблем, на які ви легко можете втратити день!
Персі

Відповіді:


728

Оновлення
версії 1.1.x доступне, читайте примітки до випуску: https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization


Пакет Microsoft.Web.Optimization тепер застарів. За допомогою ASP.NET (MVC) 4 і новіших версій вам слід встановити Microsoft ASP.NET Framework Web Optimization Framework:

  • Встановіть пакет з nuget :

    Install-Package Microsoft.AspNet.Web.Optimization
  • Створення та налаштування пакетів у 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")
            );
        }
    }
  • Викличте функцію RegisterBundles () від Application_Start () у вашому global.asax.cs:

    using System.Web.Optimization;
    
    protected void Application_Start() {
         ...
         BundleConfig.RegisterBundles(BundleTable.Bundles);
         ...
    }
  • У ваш view.cshtml включіть простір імен для оптимізації та надайте пакет (и):

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

Для отримання додаткової інформації див. Http://www.asp.net/mvc/overview/performance/bundling-and-minification


2
Для цього вам потрібен MVC4?
FloatLeft

5
Це не застаріло. Ось як я його використовую під кінцевими випусками Visual Studio 2012 та ASP.NET (MVC) 4.
mhu

29
Ваша відповідь включає "використання System.Web.Optimization;", що саме про те, про що питає запитуючий.
davidpricedev

9
@dave: Це добре чи погано? Для вирішення "відсутньої посилання на збірку" Microsoft.AspNet.Web.Optimization слід встановити, як зазначено у відповіді.
mhu

6
у шаблоні MVC за замовчуванням я міг би використовувати клас Scripts без додавання простору імен System.Web.Optimization у верхній частині сторінки. Але в моєму проекті я отримую помилку "ім'я Сценаріїв не існує". Як я можу це вирішити? Додавання цього простору імен у web.config не допомогло. Редагувати: рішення для перезавантаження допомогло, вибачте :)
Wachburn

83

З остаточно випущеною версією ASP.Net MVC 4 підхід такий:

  • Встановіть Microsoft.AspNet.Web.Optimization через nuget (оскільки він не встановлений рамкою)

    install-package Microsoft.AspNet.Web.Optimization
  • Створіть пакет у Global.asax Application_Start:

    var scripts = new ScriptBundle("~/MyBundle");
    scripts.IncludeDirectory("~/Scripts/MyDirectory", "*.js");
    BundleTable.Bundles.Add(scripts);
  • Додайте простір імен "System.Web.Optimization" до веб-перегляду "Перегляди":

     <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Optimization" />
        </namespaces>
    </pages>
  • У своєму view.cshtml додайте включення до пакета, створеного на останньому кроці:

    @Scripts.Render("~/MyBundle")

У режимі налагодження всі файли скриптів у вашому каталозі відображатимуться окремо; у режимі випуску вони будуть комплектуватися та мінімізуватися.


Правильно, ця версія включає його. Інша версія - ні.
Лука Бельбіна

1
Я не можу зрозуміти, чому це не працює для мене. Я намагався і так, і створити пакет у BundleConfig.cs, але коли я додаю @ Styles.Render ("~ / CssBundle"), на мою думку, все, що я отримую, - це <link href = "/ CssBundle" rel = "таблиця стилів "/> що дає мені 404. Будь-яка ідея чому?
всдев

@vsdev Я знаю, що це вже на 4 роки занадто пізно, але вам, можливо, доведеться перевірити свій BundleConfig.cs, щоб переконатися, що ви правильно його додаєте - рядок у цій відповіді - це лише посилання на ".js"файли. Всередині public static void RegisterBundles(BundleCollection bundles) { ... }ви повинні зробити щось подібне, bundles.Add(new StyleBundle("~/CssBundle"));і це захопить усі файли CSS у вашій CssBundleпапці. Ви не хочете, ScriptBundleяк це є у прикладі для файлів CSS.
vapcguy

17

Оновіть (перевстановіть) пакет з nuget, ви можете скористатися командою:

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


14

У моєму випадку це була проблема tfs, оскільки tfs виключає двійкові файли, тому Nugget PM знайде встановлений самородок і не оновить бібліотеку. Якщо у вас є аналогічна проблема:

  • Перейдіть до управління джерелом
  • Перейдіть до .. \ пакети \ Microsoft.Web.Optimization
  • Додати папку lib (зніміть прапорці виключити бінарні розширення)
  • Оновіть своє рішення та додайте посилання на dll із шляху

Примітка: папка пакета знаходиться на одному рівні з файлом yousolution.sln


11

Використання nuget для видалення System.Web.Optimization в консолі менеджера пакунків таким чином:

Видалення пакета Microsoft.AspNet.Web.Optimization

Потім перевстановлення за допомогою:

Установка-пакет Microsoft.AspNet.Web.Optimization

Може вирішити цю проблему за вас.


1
Не знаєте, як це відповідає на питання?
TylerD87

@ TylerD87 Simple вирішує конкретний набір обставин, і я не єдиний, хто виявив це так, якщо ви прочитаєте коментарі до цього питання, ви помітите, що Snekse сказав 29 квітня 1414 о 16:39, що їм потрібно було дотримуватись конкретних вказівок, які я дав, і, що внизу хтось інший розмістив стільки ж набагато пізніше і був схвалений.
Myzifer

Може, відредагуйте свою відповідь, щоб вона більше нагадувала відповідь? Я навіть не здогадувався, що ти відповідаєш на запитання чи що ти пропонуєш.
TylerD87

@ TylerD87 Питання стосувалося оптимізації, а моя відповідь - про оптимізацію, вона вирішує проблему, детальну у питанні, і отримала визнання щонайменше двома іншими, якщо ви запропонуєте детальну інформацію про те, як ви неправильно зрозуміли мою відповідь та як найкраще Я міг би змінити / змінити його, щоб надати більш широкій аудиторії більш чітку відповідь, тоді я був би радий внести такі зміни, але без конструктивної критики я не в змозі визначити, як я міг би покращитись.
Myzifer

Привіт, я запропонував редагування, щоб було зрозуміліше, про що я мав на увазі. Прочитавши коментарі вгорі, я бачу, що це насправді пропозиція, яка спрацювала, але те, як була представлена ​​ваша відповідь, було незрозумілим щодо того, що ви насправді пропонували.
TylerD87

6

Встановіть його з NUGet через Visual Studio Open Visual Studio 2010, виберіть Інструменти-> Менеджер пакунків бібліотеки-> Консоль диспетчера пакетів

Це відкриє консильвацію, вставляє

Install-Package Microsoft.AspNet.Web.Optimization 

і введіть. і ви закінчили


2

встановити в Global.asax application_start (у режимі RELEASE тощо):

BundleTable.EnableOptimizations = **true**;

щоб увімкнути мінімізацію та змінити на помилкові в режимі DEBUG, щоб всі файли сценаріїв та стилів відображалися окремо.


5
Це легше контролювати через web.config. Якщо <compilation debug="true" />встановлено (що досить стандартно при створенні налагоджувальної версії), оптимізація не проводиться. Зазвичай цей параметр автоматично знімається у версії версії. BundleTable.EnableOptimizationsслід використовувати лише для надмірного використання web.config. Для отримання додаткової інформації: asp.net/mvc/tutorials/mvc-4/bundling-and-minification (пошук "Контроль згуртування та мінімізації")
mhu

Це мені так допомогло, дякую. Мені довелося вимкнути це, оскільки робота з беззахисними + RequestReduce робила пакети зітхненнями.
siva.k

Цей параметр дійсно залежить від того, якщо ви використовуєте попередньо скомфіковані файли у своїх групах, чи ви використовуєте неміфіковані файли - не так багато, якщо ви перебуваєте у налагодженні чи випуску, за винятком кращих практик для кожного з цих режимів - напр. , ви можете мати проект, який ви компілюєте в режимі налагодження, але там, де він є, BundleTable.EnableOptimizations = false;тому що у вашому BundleConfig.cs ви вказуєте всі попередньо скомфіковані файли, і ви не хочете, щоб він міг їх ще мінімізувати.
vapcguy

Це справді було б лише відповіддю на чиєсь питання, якщо вони використовували б файли, які не були мінімізовані (тобто файли БЕЗ .min) у своїх BundleConfig.cs. Якщо вони використовували .min файли та встановлювали його як істинне, у них виникли б проблеми.
vapcguy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.