Как добавить ссылку на приложение 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узел в мои ссылки.
Снексе
2
@myzifer Ваш ответ правильный для этого странного поведения. Только , что бы решить эту проблему для меня работает УМК линии NuGet: UnInstall-пакет Microsoft.AspNet.Web.Optimization , а затем сразу после этого запуска установки: Install-Package Microsoft.AspNet.Web.Optimization. Пытался заставить это работать в течение нескольких недель на моем домашнем компьютере с VStudio 2013 и никогда не мог получить это. Огромное спасибо.
Раддевус
@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 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 для получения дополнительной информации.

MHU
источник
2
Вам нужен MVC4, чтобы использовать это?
FloatLeft
5
Это не устарело. Вот как я использую его в финальных выпусках Visual Studio 2012 и ASP.NET (MVC) 4.
mhu
29
Ваш ответ включает «использование System.Web.Optimization;», и это именно то, о чем спрашивает спрашивающий.
Давидпричев
9
@dave: это хорошо или плохо? Для устранения «отсутствующей ссылки на сборку» необходимо установить Microsoft.AspNet.Web.Optimization, как указано в ответе.
Чт
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» в файл «Views» web.config:

     <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
@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 находит установленный слепок и не обновляет библиотеку. Если у вас есть похожая проблема:

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

NB: папка пакета находится на том же уровне, что и файл yousolution.sln

амин
источник
11

Использование nuget для удаления System.Web.Optimization в консоли диспетчера пакетов, например:

Пакет деинсталляции Microsoft.AspNet.Web.Optimization

Затем переустановите с помощью:

Инсталляционный пакет Microsoft.AspNet.Web.Optimization

Может решить эту проблему для вас.

Myzifer
источник
1
Не уверен, как это отвечает на вопрос?
TylerD87
@ TylerD87 Простой, он решает конкретный набор обстоятельств, и я не единственный, кто обнаружил, что это так, если вы прочитаете комментарии к вопросу, вы заметите, что Снексе сказал 29 апреля '14 в 16:39, что они должны были следовать конкретным инструкциям, которые я дал, и что ниже кто-то еще опубликовал то же самое намного позже, и за него проголосовали.
Myzifer
Может быть, отредактируйте свой ответ, чтобы он выглядел больше как ответ? Я даже не осознавал, что вы отвечаете на вопрос или что вы предлагаете.
TylerD87
@ TylerD87 Вопрос был об Оптимизации, и мой ответ был об Оптимизации, она решает проблему, подробно описанную в вопросе, и была подтверждена, по крайней мере, двумя другими, если вы предложите подробности относительно того, как именно вы неправильно поняли мой ответ и как лучше всего Я мог бы изменить / изменить его, чтобы дать более широкой аудитории более четкий ответ, тогда я был бы рад внести такие изменения, но без конструктивной критики я не могу определить, как я мог бы улучшить.
Myzifer
Привет, я предложил редактирование, которое прояснит то, что я имел в виду. Прочитав комментарии вверху, я вижу, что на самом деле это предложение сработало, но то, как был представлен ваш ответ, неясно, что вы на самом деле предлагаете.
TylerD87
6

Установите его из NUGet через Visual Studio. Откройте Visual Studio 2010, выберите Инструменты-> Диспетчер пакетов библиотеки-> Консоль диспетчера пакетов.

Это откроет консоль, вставьте

Install-Package Microsoft.AspNet.Web.Optimization 

и войти. и вы сделали

Миан
источник
2

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

BundleTable.EnableOptimizations = **true**;

включить минификацию и изменить на false в режиме отладки, чтобы отрисовывать все файлы скриптов и стилей по отдельности.

zenichi
источник
5
Это проще контролировать через web.config. Если <compilation debug="true" />установлено (что является довольно стандартным при сборке отладочной версии), оптимизация не происходит. Обычно этот параметр автоматически удаляется в сборке выпуска. BundleTable.EnableOptimizationsдолжен использоваться только для отмены web.config. Для получения дополнительной информации: asp.net/mvc/tutorials/mvc-4/bundling-and-minification (поиск «Управление связыванием и минимизацией»)
mhu
Это мне очень помогло, спасибо. Мне пришлось отключить его, потому что работа с dotless + RequestReduce приводила к искажению связок.
siva.k
Этот параметр действительно зависит от того, используете ли вы предварительно минимизированные файлы в ваших пакетах, или если вы используете неминифицированные - не так уж много, если вы находитесь в Debug или Release, за исключением рекомендаций для каждого из этих режимов - например. у вас может быть проект, который вы компилируете, в режиме отладки, но там, где он есть, BundleTable.EnableOptimizations = false;потому что в вашем BundleConfig.cs вы указываете все предварительно минимизированные файлы и не хотите, чтобы он выполнял для них другую минимизацию.
vapcguy
Это действительно было бы ответом на чью-то проблему, если бы они использовали предварительно не минимизированные файлы (т.е. файлы БЕЗ .min) в их BundleConfig.cs. Если бы они использовали файлы .min и установили для него значение true, у него были бы проблемы.
vapcguy