ゴール:
Razor
テンプレートを使用してデータをフォーマットするEmbedded Resources
として埋め込みますLinq
ステートメントと拡張メソッドを使用する新しいクラスライブラリプロジェクトを作成し、MVC3をWebFormsアプリケーションに統合してクラスライブラリで機能させる方法について、 Scott Hanselman's の手順を採用しました。次に、NuGetパッケージRazorEngineを使用して、テンプレートをオブジェクトに適用します。
これまでのところ、1つのしゃっくりでうまく機能します:cshtmlファイルを編集するとき、IntelliSenseはLinqステートメントまたは拡張メソッド(MVCのかなり重要な部分)を認識しません。
したがって、次のcshtmlファイルの場合:
@model Customer[]
@Model.Count()
@if (Model.Where(customer => customer.Type == 'New').Any())
{
<span>Found at least one new customer.</span>
}
...次のエラーが表示されます。
Feature 'extension method' cannot be used because it is not part of the ISO-2 C# language specification
Feature 'lambda expression' cannot be used because it is not part of the ISO-2 C# language specification
誰かが私が不足しているものを知っていますか?事前に感謝します-これに対する答えを探すのに何時間も費やしました。
以下は、Viewsフォルダ内のweb.config
です。
<?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" />
</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> ... </system.webServer>
</configuration>
そして、web.config
ファイルをプロジェクトのルートに追加しました。次のものが含まれます。
<configuration>
<system.web>
<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.Helpers, Version=1.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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add Assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
...
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
...
</configuration>
そして、これがプロジェクトのリファレンスです:
クラスライブラリには.NET Framework 4
のターゲットフレームワークがあり、ビルドの詳細設定で、言語バージョンはC# 3.0
に設定されています。
拡張メソッドとLinqを使用すると、プロジェクトが正しくビルドおよび実行されます。エラーをスローするのは、単なるインテリセンスです。
数時間いじくり回した後、標準のVisual Studio拡張機能が正しく読み込まれていないことが原因であることがわかりました。
私はエラーを受け取りました:
「VSTS for Database Professionals SQL Serverデータ層アプリケーション」パッケージが正しく読み込まれませんでした
Microsoft Connect で答えを見つけました。
修正方法
1)Visual Studioメディアから次のインストーラーを実行します。
\ WCU\DAC\DACFramework_enu.msi
\ WCU\DAC\DACProjectSystemSetup_enu.msi
\ WCU\DAC\TSqlLanguageService_enu.msi
2)VSを再起動します
これが他の誰かの助けになることを願っています。
この問題を解決する鍵は、app.configまたはweb.configに次のタグを追加することです
<system.web>
<compilation debug="false" targetFramework="4.0" />
</system.web>
注:場合によっては、プロジェクトのアンロードと再ロードが必要です。
私はこのエラーのすべての解決策を試しましたが、Webのどこにでも見つかり、うまくいきませんでした。
プロジェクトのweb.configファイルからプロジェクトのapp.configファイルに追加のMVC構成ブロックをコピーすることで、最終的にこのエラーが消えました(そしてIntelliSenseが機能しました)。
Visual Studioは、プレーンな古いC#ライブラリプロジェクトのweb.config(少なくともその一部)を尊重していないようです。
プロジェクトのapp.configファイルは次のようになります。
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<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.Helpers, Version=1.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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add Assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
幸運を。
私の解決策は、プロジェクトの種類を変更することでした
1.プロジェクトをアンロードする
2.プロジェクトを編集する
3. ProjectGuidの直後に(プロジェクトのMVCバージョンに応じて)以下の行を追加します。
MVC 4
<ProjectTypeGuids>{E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
MVC 3
<ProjectTypeGuids>{E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
@ Matt
これを、(Viewsフォルダーではなく)プロジェクトのルートのWeb.Configに追加してみてください
<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" />
</namespaces>
</pages>
</system.web.webPages.razor>
...
</configuration>
「system.codedom」セクションを構成ファイル(コンソールアプリケーションのapp.config)に追加します。例:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs;cshtml" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v4.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
今日のプロジェクトでは、まさにこの問題がありました。これは、チームメンバー間で複製できるため、インストールの問題ではありませんでした。 Intellisenseは、CS#3ではなく2.0コードにページをコンパイルしています。
私はそれを追跡して、クラスプロジェクトにWeb参照を追加しました(MVCContribを使用してそれを参照ライブラリとして使用します http://lostechies.com/erichexter/2009/11/01/asp-net-mvc -portable-areas-via-mvccontrib / )
WebReferenceを削除して別のプロジェクトに移動し、問題を修正しました。かなりのハンティングを行ったので、これが他の人の役に立つことを願っています!