私はVS2010で書かれた既存のプロジェクトを持っていますが、VS2010でロードすると完全に機能します。
この同じプロジェクトをVS2013にロードすると、MVC Razorビューには、設定フォルダーがビューフォルダーにないかのように多くのエラーが含まれます。
ルートフォルダーとビューフォルダーの両方から構成ファイルを使用してRazorエディターを正しくロードしていないようで、代わりに次のようなエラーが表示されます...
The name 'model' does not exist in the current context
そして...
'System.Web.WebPages.Html.HtmlHelper' does not contain a definition for 'LabelFor'
and no extension method 'LabelFor' accepting a first argument of type
'System.Web.WebPages.Html.HtmlHelper' could be found
(are you missing a using directive or an Assembly reference?)
...
何がこれを引き起こすのでしょうか?
編集:要求された構成ファイル....
メインのweb.configファイルから(投稿するには大きすぎるため、すべてではありません)
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Ninject" culture="neutral" publicKeyToken="c7192dc5380945e7" />
<bindingRedirect newVersion="3.0.0.0" oldVersion="0.0.0.0-3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.EnterpriseLibrary.Validation" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect newVersion="5.0.505.0" oldVersion="0.0.0.0-5.0.505.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
「〜/ Views /」の設定ファイル...
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="Host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Emedia.Common.Mvc.Views.Helpers"/>
<add namespace="Emedia.Common.Mvc.Views.Extensions"/>
<add namespace="Emedia.Common.Utilities"/>
<add namespace="Emedia.Common.Utilities.Extensions"/>
<add namespace="Emedia.Common.Mvc.Controllers.Helpers"/>
<add namespace="Emedia.Resources.Service"/>
<add namespace="Emedia.Subscriber.Controllers"/>
<add namespace="Emedia.Subscriber.Controllers.ViewModels"/>
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add Assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
@ChrisMoschiniの投稿を編集することを検討しましたが、十分に違うと思いました。私の問題は、新しいMVC5アプリケーションを開始し、テンプレート/開始点として使用したい古いMVC3プロジェクトからweb.config設定を過剰にコピーしたことです。これを行うと、web.configで無効なバージョンが参照されることになります。
修正するために、別の新しいMVC5プロジェクトを作成し、悪いプロジェクトの次の構成値が、変更されていないVanilla MVC5アプリと一致することを確認しました。 繰り返しますが、これらのバージョン番号をやみくもにコピーしないでください。動作させようとしているバージョンのVanilla MVCアプリと一致することを確認してください
ルートweb.config
:
<appSettings>
...
<add key="webpages:Version" value="3.0.0.0"/>
...
</appSettings>
<system.web>
...
<compilation debug="true" targetFramework="4.5.1"/>
<httpRuntime targetFramework="4.5.1"/>
...
</system.web>
の中に Views\Web.config
:
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
...
<section name="Host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
...
</sectionGroup>
<system.web.webPages.razor>
...
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
...
</system.web.webPages.razor>
私のプロジェクトのいくつかでは、この問題が数か月にわたって続きました。私は非常に多くの回避策を試しましたが、何も機能しませんでした。問題はプロジェクトにあるように見えました。同じプロジェクトでは、Visual Studioを搭載したすべてのPCでIntellisenseの問題が発生します。最後に、私はこの投稿を読みました: http://www.dennisonpro.info/managing-intellisense-in-razor-views-with-mvc-5-using-custom-builds-in-visual-studio-2013 /
私たちの場合、原因は、これらすべてのプロジェクトの出力ディレクトリが「bin \」以外に変更されたことです。 OutputPathを「bin \」に戻す(およびプロジェクトをクリーンアップし、Visual Studioを閉じてから再度開く)ことで、Intellisenseを取り戻しました。
上記の投稿は、Intellisenseを保持しながら、別の出力ディレクトリを維持する回避策も提供しました。
これがいつか誰かを助けることを願っています。
MSは、VS2013では「Intellisense for Razor(CSHTMLおよびVBHTML)ファイルはHTMLマークアップに限定される」と述べています。
ただし、各.cshtml内に次の2行を追加すると、VS2013のMVC3でインテリセンスが再び機能します。
@using System.Web.Mvc.Html
@inherits System.Web.Mvc.WebViewPage<dynamic>
dynamic
の代わりに、モデルのタイプを置くことができます。
MVC3プロジェクトをMVC5にアップグレードし、Microsoftが推奨するこの問題に対する唯一の真の答えを避けるために、できる限りのことを行いました。
新しいプロジェクトからやり直し、結果のビットを既存のプロジェクトに移植します。
そのプロセスは大きな時間の浪費であり、マイクロソフトは実際のアップグレードパスを実行可能にする必要があるように見えますが、ここでの問題は技術的なものではなく感情的なものです。 、次を新しいMVC5プロジェクトの結果に置き換えます。
\Packages\*
\Project\Project.csproj
\Project\packages.config
\Project\Web.Config
\Project\Views\Web.Config
\Project\Areas\*\Views\Web.Config
そうでない場合は、物事を爆破している1つの設定を見つけようとして、永遠に円を巡回するだけです。私たちのケースでは、新しく作成されたRazor Intellisenseで動作するMVC5プロジェクトとまったく同じWeb.Configsがあり、見つけられるあらゆる種類のアップグレードツールを実行していました。インテリセンスは仕事を拒否しました。
.csprojやweb.configsなどを吹き飛ばした後、Intellisenseは魔法のように生き返りました。 2つの側面を比較すると、私が見つけた答えはどれも、私が見ているものと一致しません。 Web.Configsはほぼ同一であり、異なる部分は無関係です。主な変更点は、実際には\ Packages \にあるものです-古いRazor、MVC、およびWebPagesの多くのdllがなくなりました。それはトリックかもしれませんが、それをスキップして時間を大幅に節約してください。新しいMVC5プロジェクトを作成し、上記のファイルをダンプするだけです。これが唯一の健全なアップグレード方法です。
私は最近、この問題を自分で解決しました。 MVC4からMVC5(具体的には5.1)にアップグレードしました。 MVCの新しいバージョンにアップグレードすると、この混乱が生じ、私はそれを解決するために何時間も費やしました。 Web.Config
ファイルを少し変更すると、インテリセンスの問題が修正されました!
プロジェクトはVS2010で機能しますが、2013年では機能しないということですか?この回答を参照してください here 。
MVC5にアップグレードすることをお勧めします。それは苦痛ではなく、アップグレードはかなりシームレスなはずです。
MVC5にアップグレードしてもまだインテリセンスが得られない場合は、Web.Config
ファイルを手動で更新する必要があります。アップグレードでは正しく実行されない可能性があります。
これは、MVC5の変更を反映する必要がある/ Viewsフォルダー内のWeb.conifg
の修正バージョンです。
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="Host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Emedia.Common.Mvc.Views.Helpers"/>
<add namespace="Emedia.Common.Mvc.Views.Extensions"/>
<add namespace="Emedia.Common.Utilities"/>
<add namespace="Emedia.Common.Utilities.Extensions"/>
<add namespace="Emedia.Common.Mvc.Controllers.Helpers"/>
<add namespace="Emedia.Resources.Service"/>
<add namespace="Emedia.Subscriber.Controllers"/>
<add namespace="Emedia.Subscriber.Controllers.ViewModels"/>
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add Assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
アップグレードがオプションではない場合、MVC3のインテリセンスサポートが必要な場合は、VS2010を引き続き使用する必要があると思います。ただし、MVC5にアップグレードすることを強くお勧めします。
これに出くわすかもしれない他の人のために、私は本当に私の問題を解決するか、それに関係しない以前の答えを見つけませんでした。とにかくこれを解決してインテリセンスを再び動作させる方法は、binフォルダーに移動してそこにあるすべてのファイルを削除してから、クリーン/リビルドして修正しました。
新しいプロジェクトを作成したとき、intellisenseは正常に機能しましたが、何らかの理由で現在のプロジェクトでは機能しませんでした。 Views/Web.config
ファイルで見つかった唯一の違いは、MVCバージョン5.2.0.0と新しいプロジェクト5.0.0.0があったことです。私たちのために働いたのはこれを変更することでした:
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
Version=5.0.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />
これに:
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
Version=5.2.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />
次の組み合わせにより、問題を解決できました。
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="Host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false" />
</appSettings>
[...]
この質問は解決されましたが、上記のどれも役に立たなかったため、将来の人々のためにこれを追加しています:
管理者としてVisual Studioを実行してみてください。
どういうわけか、私のNugetパッケージ(System.Web.Mvcなどのすべての必要な参照を含む)を削除しようとしたときに、MyPC\Meからの許可が必要だと言われました。 )いずれにしても、少なくとも管理者として実行すると、少なくともintellisenseを修正したファイルにアクセスできます。
私の場合、すべてのビューをエリアからルートビューフォルダに移動したので、web.configがどこにあるかについてVSが混乱したと思います。 web.configからWeb.configに名前を変更し、構成の内容を編集しました(razor Host factory dllのバージョン番号を5.2.2.0から5.2.3に変更するなど)が、それを変更しましたバック。
その後、約30分間散歩し、戻ってきてVSを再起動しましたが、修正されました!
ツール、ライブラリパッケージマネージャーのパッケージマネージャーコンソールを使用して、NuGetパッケージを更新します。
コマンドラインで.. PM> Update-Package
これにより、NuGetパッケージが更新され、System.web.MVCの現在のバージョンが確認され、Viewsフォルダーの下のweb.configファイルでこのバージョンが更新されます。
<system.web.webPages.razor>
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="System.Web.Webpages"/>
</namespaces>
</pages>
</system.web.webPages.razor>
ソリューションを閉じて、再度開きます。
これがうまくいくことを願っています!!!
最終的には、ネットワークサーバーのクラッシュのためにPCで他の多くの問題が発生し、最終的にVisual Studioを再インストールしました。
これは明らかに問題を解決しました...どのように私は知りませんが、それはしました。
多分私の場合、それは典型的な問題ではなく、単にインストールの欠陥だったのだろうか。
そのため、これを回答としてマークしますが、他のすべての返信はこの問題に対する潜在的に良い回答であるため、+ 1します。
しかし、Microsoftは、Visual Studio 2013は4よりも低いバージョンのMVCでインテリセンスをサポートしていないことを明確に示しているので、MVC 3を使用している場合は新しいバージョンのMVCを使用している場合はプロジェクトをアップグレードし、ここでは他に何も動作しないことを視覚スタジオを再インストールしてください。
また、注目に値します... MVCは現在はnugetパッケージなので、ダウンロード再配布からMVCをインストールしないでください。
から変更しました
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
Version=5.2.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />
これに:
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
Version=5.0.0.0, Culture=neutral, PublicKeyToken=123JHJF56AD364E35" />
そしてそれはうまくいきました!
MVC 5では、エリアの下にフォルダーを追加するだけでエリアを追加しようとすると、コントローラー、ビュー、モデルなどのサブフォルダーに、エリアを登録する* AreaRegistration.csファイルやweb.configがありません。ビューに含めるかみそりの要素をVSが理解できるビューで。その結果、ViewBagのようなビューではインテリセンスがビューで機能しません。これらのファイルの作業例を他のエリアに持っている場合、それらをコピーして適切に更新できます-または、エリアを右クリックして追加-エリアを作成し、それらのファイルを作成してエリアからやり直すことができます。
同様の問題に遭遇しました。 VS2015 Community Editionで作成したMVC 5プロジェクトがあり、VS2013 Ultimateで作業する必要がありました。次の<system.codedom></system.codedom>
ルートweb.configファイルからのブロックは、VS2013でのRazorビューでIntelliSenseが再び機能するようになったものです。
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
私はこの問題を6か月間抱えていましたが、_@model
ディレクティブをページの上部に。以前はコードブロック内にありました。
Visual Studio 2012を使用しています。上記のすべてを試してみましたが、最終的にインストールすると問題が解決します。
ASP.NETおよびWebツール2013.1: http://blogs.msdn.com/b/webdev/archive/2013/11/18/announcing-release-of-asp-net-and-web-tools- 2013-1-for-visual-studio-2012.aspx
私はほとんどすべてのソリューションを試しましたが、インテリセンスを取得できず、最後に解決策を見つけました:
.cshtml
ファイルまたは任意のビューファイルを右クリックしますMVC 3から5にアップグレードすると、ルートディレクトリWeb.configでappSettingsキーwebpages:version
が2.0.0.0
に設定されていることがわかりました。これを3.0.0.0
に変更すると、この問題が修正されました。
<appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> </appSettings>
私はVS 2017 Professionalを使用しており、この投稿でほぼすべての回答を試しました。また、 その投稿 の回答も試しましたが、何もうまくいきませんでした。昨日、VSをバージョン15.2 (26430.6) Release
に更新しました。intellisenseがcshtmlファイルに戻りました!
System.Web.Mvc
参照のCopyLocal
プロパティをtrue
に設定してみてください。これはIntellisenseに役立つ場合があります。