MVC-3-converted-to-4アプリのSystem.Web.Optimizationへの参照を追加する方法


458

最近MVC 3からMVC 4ベータに変換したプロジェクトで、新しいバンドル機能を使用しようとしています。上部にBundleTable.Bundles.RegisterTemplateBundles();必要なglobal.asaxのコード行が必要using System.Web.Optimization;です。

これを行うと、「アセンブリ参照がありませんか?」という赤い波線が表示されます。参照を追加してダイアログの[.NET]タブをクリックすると、AZからソートしても表示されませんSystem.Web.Optimization

この参照をプロジェクトに追加するにはどうすればよいですか?


6
すでに最適化を行っていましたが、ScriptBundleで問題が発生しており、Optiをアンインストールしてから再インストールした後でしか解決できませんでした。
Myzifer 2013年

1
@Myziferコメントを回答として送信してください。System.Web.Optimizationノードをリファレンスに戻すには、これが唯一の方法でした。
Snekse 2014

2
@myziferあなたの答えは、この奇妙な行動の正しい答えです。唯一私がnugetのCMDラインを実行しているため、この問題を解決するだろう事:アンインストール・パッケージMicrosoft.AspNet.Web.Optimizationし、右後にそのインストールを実行:インストール・パッケージMicrosoft.AspNet.Web.Optimizationを。これをVStudio 2013を搭載した自宅のコンピューターで数週間動作させるように試みましたが、それを得ることができませんでした。どうもありがとう。
raddevus

@Myzifer-私のためにも機能しました-VSOnlineからプロジェクトを「チェックアウト」し、このエラーが発生しました-アンインストールしてから再インストールします-20秒の仕事-ありがとうございます-これはあなたが簡単に1日を失うことができる愚かな問題の1つです!
パーシー、

回答:


728

更新
バージョン1.1.xが利用可能です。リリースノートをお読みくださいhttps : //www.nuget.org/packages/Microsoft.AspNet.Web.Optimization


Microsoft.Web.Optimizationパッケージは廃止されました。ASP.NET(MVC)4以降では、Microsoft ASP.NET Web最適化フレームワークをインストールする必要があります。

  • 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")
            );
        }
    }
    
  • global.asax.csのApplication_Start()からRegisterBundles()関数を呼び出します。

    using System.Web.Optimization;
    
    protected void Application_Start() {
         ...
         BundleConfig.RegisterBundles(BundleTable.Bundles);
         ...
    }
    
  • view.cshtmlにOptimization名前空間を含め、バンドルをレンダリングします。

    @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
@デイブ:それは良いですか悪いですか?「アセンブリ参照がありません」を解決するには、回答にあるようにMicrosoft.AspNet.Web.Optimizationをインストールする必要があります。
mhu

6
デフォルトのMVCテンプレートでは、ページの上部にSystem.Web.Optimization名前空間を追加せずにScriptsクラスを使用できます。しかし、私のプロジェクトでは、「スクリプト名が存在しません」というエラーが表示されます。どうすれば解決できますか?この名前空間をweb.configに追加しても効果がありませんでした。編集:ソリューションのリロードが役立ちました、申し訳ありません:)
Wachburn

83

ASP.Net MVC 4の最終リリースバージョンでは、アプローチは次のとおりです。

  • nugetを使用してMicrosoft.AspNet.Web.Optimizationをインストールします(フレームワークによってインストールされないため)。

    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 = "stylesheet "/>これで404が得られます。理由は何ですか?
vsdev 14

@vsdevこれは4年では遅すぎることはわかっていますが、BundleConfig.csをチェックして、正しく追加されていることを確認する必要がある場合があり".js"ます。この回答の行はファイルを参照しているだけです。内部でpublic static void RegisterBundles(BundleCollection bundles) { ... }は、次のようなことができるはずbundles.Add(new StyleBundle("~/CssBundle"));であり、CssBundleフォルダ内のすべてのCSSファイルを取得します。ScriptBundleCSSファイルの例のようにしたくない。
vapcguy

17

nugetからパッケージを更新(再インストール)します。次のコマンドを使用できます。

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


14

私の場合、tfsはバイナリを除外するため、これはtfsの問題でした。そのため、Nugget PMはインストールされているナゲットを検出し、ライブラリを更新しません。同様の問題がある場合:

  • ソース管理に移動
  • .. \ packages \ Microsoft.Web.Optimizationに移動します
  • libフォルダーを追加(除外バイナリー拡張のチェックを外します)
  • ソリューションを更新し、パスからDLL参照を追加します

注意:パッケージフォルダーはyousolution.slnファイルと同じレベルにあります


11

nugetを使用して、次のようにパッケージマネージャーコンソールでSystem.Web.Optimizationをアンインストールします。

アンインストールパッケージMicrosoft.AspNet.Web.Optimization

次に、以下を使用して再インストールします。

インストールパッケージMicrosoft.AspNet.Web.Optimization

あなたのためにこの問題を解決するかもしれません。


1
これが質問にどのように答えるかわかりませんか?
TylerD87 2015

@ TylerD87シンプルこれは特定の一連の状況を解決し、これが事実であるとわかったのは私だけではありません。質問のコメントを読むと、Snekseが14年4月29日16:39に言ったことに気づくでしょう。彼らは私が与えた特定の指示に従う必要があり、その下では他の誰かがほとんど同じように投稿して賛成した。
Myzifer

回答を編集して、回答のように見えるようにしてください。あなたが質問に答えているか、あなたが提案していたことに気づいていませんでした。
TylerD87 2015

@ TylerD87質問は最適化に関するものであり、私の回答は最適化に関するものでした。それは、質問で詳述された問題を解決し、少なくとも2人に承認されました。私はそれを変更/修正して、より広い聴衆に明確な答えを提供することができます。そうすれば、そのような変更を加えたいと思いますが、建設的な批判がなければ、どうすれば改善できるか判断できません。
Myzifer

こんにちは、私が言及している内容をより明確にする編集を提案しました。上部のコメントを読んだところ、これは実際に機能した提案であることがわかりましたが、回答の提示方法は、実際に提案している内容が不明確でした。
TylerD87 2015

6

Visual Studioを介してNUGetからインストールしますVisual Studio 2010を開き、[ツール]-> [ライブラリパッケージマネージャー]-> [パッケージマネージャーコンソール]を選択します。

これはconslveを開き、貼り付けます

Install-Package Microsoft.AspNet.Web.Optimization 

入力します。そしてあなたは終わった


2

Global.asax application_start(RELEASEモードなど)で設定:

BundleTable.EnableOptimizations = **true**;

すべてのスクリプトとスタイルファイルを個別にレンダリングするには、縮小を有効にし、デバッグモードで falseに変更します。


5
web.configを使用してこれを制御する方が簡単です。<compilation debug="true" />が設定されている場合(デバッグバージョンをビルドするときの標準)、最適化は行われません。通常、この設定はリリースビルドで自動的に削除されます。BundleTable.EnableOptimizationsweb.configを無効にするためにのみ使用してください。詳細情報:asp.net/mvc/tutorials/mvc-4/bundling-and-minification( "Controlling Bundling and Minification"を検索)
mhu

これは私にとても役立ちました、ありがとう。dotless + RequestReduceを使用すると、バンドルが文字化けした混乱状態になるため、これを無効にする必要がありました。
siva.k 14年

この設定は、バンドルで事前に縮小されたファイルを使用しているか、または縮小されていないファイルを使用しているかに依存します。デバッグまたはリリースの場合は、これらの各モードのベストプラクティスを除き、それほどではありません。 、デバッグモードでコンパイルしているプロジェクトを持つことができますが、 BundleTable.EnableOptimizations = false;、BundleConfig.csですべての事前に縮小されたファイルを指定してため、プロジェクトで別の最小化を行わないようにする必要があります。
vapcguy

BundleConfig.csで事前に最小化されていないファイル(つまり、.minを含まないファイル)を使用している場合、これは実際には誰かの問題に対する回答になります。.minファイルを使用してtrueに設定すると、問題が発生します。
vapcguy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.