参照の追加にSystem.Web.Mvcが表示されないのはなぜですか?


132

C#、Visual Studio 2010を使用します。

MSDNに記載されているSystem.Web.Mvcという名前空間があります。その名前空間のすべてのタイプのドキュメントには、それらがSystem.Web.Mvc.dllます。

ただし、[参照の追加]の[.NET]タブに移動すると、このアセンブリがリストに表示されません。どうして?


1
明確にできますか?プロジェクトはその参照なしで機能しますか?それはあなたのweb.configにありますか(私の答えを参照してください)?
基本的な

4
私はプロジェクトに取り組んでいません。私はここStackOverflowで誰かを助けたかっただけです。通常、IntelliSenseやF12のタイプを調べるために参照を追加します。この場合、目的のアセンブリがリストにないため、理由を尋ねました。
Timwi

1
このページの読者への注意-今日(2015-02-09)現在、これを解決する方法は時間とともに変化しています-すべての回答を読んでください-VS.NETおよび.NETフレームワークのさまざまなバージョンがMVCで参照されているコードを移動します別の場所に。
qxotk 2016

回答:


106

VS Express 2012では、「アセンブリ」タブでSystem.Web.Mvcを見つけることができませんでしたが、少し検索したところ、デフォルトの「アセンブリ\フレームワーク」ではなく、「アセンブリ\拡張」タブを調べる必要があることがわかりました。" タブ。


1
あなたが私が抱えていた問題の根本的な原因を見つけたので、あなたのために+1してください。以下で禁止されているNuGetインストール方法を使用することを選択しました。そこで、私が行ったことについてコメントします。
qxotk 2016

Visual Studio Community 2015でこの方法を試しましたが、バージョンの非互換性に関連するランタイムエラーが発生しました(Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference)。ソリューションに別のバージョンを参照する別のプロジェクトがあり、この方法ではSystem.Web.Mvc、Version = 4.0.0.0への参照を追加することしかできませんでした。NuGetインストールメソッドで正しいバージョンが追加されました
NJS '20

101

最善の方法は、NuGetパッケージマネージャーを使用することです。

以下のMVCパッケージを更新するだけで動作します。

ここに画像の説明を入力してください


4
これは、ほとんどの場合、MVCへの参照を追加する正しい方法であることを認めなければなりません(参照の誤りが原因で発生する可能性がある、Visual Studioの外部でのアプリの実行に関する問題を回避する必要があります)。ただし、すでにMVCのいくつかのプロジェクトが含まれている大きなソリューションでは、「ソリューションのNuGetパッケージの管理」を使用して同じバージョンのライブラリをインストールすることをお勧めします。その理由は、NuGetパッケージマネージャーからインストールしただけでは、バージョンの非互換性が生じる可能性があるためです(マネージャーは通常、最新バージョンを提供します)。
jahu

2
私は、Visual Studio 2015でコンパイルできないMVC 4を使用するプロジェクトにそのソリューションを使用しました。これにより、プロジェクトライブラリがすべての開発者間で均一になります。
ceetheman

1
他のチームメンバーがVS2013を持っているのに対し、VS2015のみが含まれているボックスでこの問題が発生しました-コードとビルドエラーがないのに、古い場所を参照している可能性があります(ビルドエラーはありません)。注目すべきことに、今日のところ、問題の原因となった参照であるMicrosoft.Web.Mvcを見つけることができませんでした。@forderahからの回答では、NuGetでは名前が異なるという事実に光を当てています。Microsoft.Web.MvcはMicrosoft.AspNet.Mvcになりました。これにより、回答に記載されている依存関係も取り込まれます。
qxotk 2016

1
私はVS2017でこの問題を抱えていましたが、これで修正されました。実際にMicrosoft.AspNet.Mvcを探しているのに、参照する必要があるアセンブリがSystem.Web.MvcであるとVS2017が教えてくれた理由がわからない
Michael Davidson

60

同じ問題があり、System.Web.MVC参照アセンブリを見つけることができませんでした。

ようやく発見し、以下の場所にありました。

VSがCにインストールされている場合は注意してください(MVC.dllが、誰もが話しているデフォルトの場所にない場合があります。つまり、「参照アセンブリ。つまり、C:ドライブにある」フォルダーをます)。

ない場合は、必ずここにあるはずです。

\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

そのため、参照または追加参照メニューの参照タブを使用してDLLを追加します。


1
これにより、参照が取得されますが、フレームワークアセンブリリストを使用してこの参照を以前に追加したことがあると確信しています。
ザレフェス2013年

9
VCSのチームで作業する場合は、あまり良い解決策ではありません。この場合、絶対パスは悪です。
Denis The Menace

絶対パスの依存関係がハードコードされているため、これはあらゆる種類のチーム開発環境では不適切なソリューションであることに間違いなく同意してください。
Craig

これを回避する方法は、誰もがDLLに同じパスを使用していることを確認することです。チームメンバー全員がその場所にアセンブリをインストールしていれば、問題ありません。または、そのパスからDLLをコピーしてプロジェクトに直接配置することもできます。これにより、DLLは相対パスになります。ただし、どちらの方法でも、そのDLLがどこにあるのかを知ることから始めるのが良いでしょう。
vapcguy

これは本当に役に立ちました。しかし、マイクロソフトはこれをはるかにクリーンで簡単なはずです...
でした

28

Nuget Package Manager Consoleから次のように追加することもできます。

Install-Package Microsoft.AspNet.Mvc -Version 4.0.20710.0 -ProjectName XXXXX

Microsoft.AspNet.Mvcは、次のものに依存しています。

  • 'Microsoft.AspNet.WebPages(≥2.0.20710.0 && <2.1)'
  • 'Microsoft.Web.Infrastructure(≥1.0.0.0)'
  • 'Microsoft.AspNet.Razor(≥2.0.20710.0 && <2.1)'

...それは私にとって大したことのないようです。私たちの場合、これは、Mvcアプリのサポートを提供するためだけに存在するクラスライブラリです。したがって、最悪の場合、それは良性の依存関係であると考えます。

ファイルシステムまたはGACのアセンブリを指すよりも、これを優先します。将来のパッケージの更新は、過去のGACおよびファイルシステムアセンブリの参照での経験よりもはるかに簡単です。


1
私はこの方法を使用し、参照でローカル絶対パスを使用しないことに同意します。NuGetパッケージマネージャーを使用して、パッケージと依存関係を追加すると、VS2015のみのボックスの問題が修正されました。
qxotk 2016

11

私は同じ問題を抱えており、ここに面白い理由があります:私の推測では、あなたはSystem.Web.Mvc下にいると予想していますSystem.Webはリストのに。しかし、リストはアルファベット順ではありません。

最初にリストを並べ替え、次にの近くを調べますSystem.Web


1
また、正しいバージョンを入手していることを確認してください。私の場合、System.Web.Mvc v2とv4があり、それらも互いに隣接していません。
TTT 2013

同じ理由でSystem.Web.Mvcを見つける同じ問題がありました。代わりにMicrosoft.AspNet.Mvcを使用しました。バージョン番号に関して、ソリューション内の他のプロジェクトが何を使用しているかを確認することを確認しました。
qxotk 2016

5

「そのXMLをWeb.configに追加しても機能しますが、質問には答えられません」

そこにあるはずです。デフォルトでは、参照の追加リストが順序付けされているようですが、そうではありません。名前のヘッダーをヒットして、もう一度見てください。


確信が持てない限り、「このアセンブリがリストにありません」とはよく言いません。
Timwi

@Timwi私は考えましたが、他の答えを考えると、vs 2010がインストールされていると存在しない可能性がほとんどないという可能性があり、私の場合、私が持っていた名前ヘッダーにぶつかることなく、参照リストで必要なものを常に見つけましたそれを言うために...実際、私は今まで私が以前にこれまで必要がなかった理由を知っています。 weblogs.asp.net/scottgu/archive/2009/10/29/...を
eglasius

名前ヘッダーをクリックすると、並べ替えができると言っているのですか。ここでは私のマシンでは何もしません...
Roman Starkov

1
@romkynsリスト内のすべてのアセンブリが読み込まれた後にのみ機能します。
eglasius

5

次の手順を確認してください。

  1. MVCが正しくインストールされていることを確認します。
  2. プロジェクトのプロパティを確認し、プロジェクトのターゲットフレームワークを確認します。ターゲットフレームワークが.Net Framework 4に設定されていない場合は、設定します。

:ターゲットフレームワークが.Net Framework 4 Client Profileに設定されている場合、参照リストにMVC参照はリストされません。.Net Framework 4と.Net Framework 4 Client Profileの違いについては、こちらをご覧ください

.NET Framework 4クライアントプロファイルは、クライアントアプリケーション用に最適化された.NET Framework 4のサブセットです。Windows Presentation Foundation(WPF)、Windowsフォーム、Windows Communication Foundation(WCF)、ClickOnce機能など、ほとんどのクライアントアプリケーションに機能を提供します。これにより、.NET Framework 4クライアントプロファイルを対象とするアプリケーションの展開がより速くなり、インストールパッケージが小さくなります。


これは良いヒントでした。プロジェクトのプロパティに移動すると、.NET Core 1と2しかリストされていませんでした。.NETFramework 4.xはありません。リストにアセンブリがありませんでした。.NET Frameworkの代わりに.NET Coreを使用するのは、私がプロジェクトを構築した方法でした-私は間違ったオプションを選択しました。今私は違いを知っています。:)
vapcguy

4

「mvc」を検索してこの問題を解決しました。リストに含まれていないにもかかわらず、System.Web.Mvcが検索結果に表示されました。


3

目的のアセンブリがリストに表示されました。

私はそれが表示された原因を推測することしかできませんが、これまでに行ったことのない[ファイル][ 新規][ プロジェクト] →[ ASP.NET Webアプリケーション]を選択したことが原因だと思います。これにより、何らかの初期化が遅れ、リストにWeb開発用の追加のアセンブリが追加された可能性があります。


それは常に確かに常にそこにありました、それは大丈夫です:P ...私が私の回答に追加したコメントを参照してください、それは言うリンクで:アルファベット順に並べ替えない... "...これは、vs 2010の新しい動作ですが、あなたの質問を見るまで、私はそのことに気づきませんでした。
eglasius

@egl私はここ(VS2010)で自分のマシンでテストしたところ、リストにまったく含まれていません。Target Frameworkに応じて異なるアセンブリセットを取得しますが、これはありません。
Roman Starkov、2009

@romkynsは.net 4をターゲットにして、私の回答で述べたことを行います。また、非同期読み込みを行うため、読み込みに十分な時間を確保してください。
eglasius

2

これはVisual Studio 2012で変更されました(元の質問ではVS2010と書かれていますが、タイトルは検索にヒットします)。

VS2012 MVCプロジェクトを作成すると、system.web.mvcがソリューションのピアであるパッケージフォルダーに配置されます。これは、デフォルトでWebプロジェクトで参照され、そこで正確なパスを見つけることができます)。

これをセカンダリプロジェクトで参照する場合(たとえば、フィルターまたはその他の属性を持つサポート.dll)、そこから参照できます。


2

VS 2012ではSystem.Web.Mvcを取得しませんでしたが、VS 2013では取得しました。AddReferenceDialogを使用して、 ここに画像の説明を入力してください

または、これはプロジェクトパスにあります。

YourProjectName \ packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll


既存のプロジェクトパスのどこにあるかを示すヒント。どうも!
アラン

0

MVCアセンブリは、プロジェクト自体ではなく、web.configファイルで参照されていると思います。

このようなもの:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

あなたのコメントに返信するには;

私が与えることができる最良の答えはここからです

add要素は、動的リソースのコンパイル中に使用するアセンブリ参照を追加します。ASP.NETは、各コードモジュールをコンパイルするときに、このアセンブリをリソースに自動的にリンクします。


OK、そのXMLをWeb.configに追加しても機能しますが、質問の答えにはなりません。
Timwi

それがインテリセンスを提供するように「機能する」?私は自分の回答を編集しました
基本的な

0

個別にインストールでき、フレームワークに含まれていません。タブリストの「拡張機能」を選択します。他にも多数のライブラリが存在します。古いライブラリを使用する必要はありません。古い20 30と4001が存在します。


0

Visual Studio 2017でこの問題が発生した場合は、以前のバージョンのVSで作成されたMVC 4プロジェクトで参照ヒントパスを指定して作業している可能性があります C:\Program Files (x86)\Microsoft ASP.NETいる。Visual Studio 2017はこのディレクトリをインストールしなくなりました。

通常、これは、2017年のインスタンスと一緒にVisual Studio 2015のコピーをインストールすることでこれを解決し、上記のパスに必要なライブラリをインストールします。次に、影響を受けるプロジェクトのすべての参照を更新します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.