2017-05-03 9 views
8

こんにちは私は奇妙な問題があります。 ヌル伝播機能とレイザービュー

は、私は私のプロジェクトは、4.6.1フレームワークに基づいており、この

@(Model.ligneDossierLie?.dossier_id) 

ように私のかみそりページにヌル伝播機能を使用して、私は最後のCodeDOMコンパイラを使用1.0.4 とコンパイラ2.1.0

ひげそりビューでは、C#5でC#6機能を使用できないというエラーメッセージが表示されます。

しかし、私のプロジェクトは、C#7 ....

を使用しているが、私は戻ってC#6にロールし、それが正常に動作します。

誰かがこの場合にC#7の使い方を知っていますか?

ありがとうございます。

のWeb.config

<system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/> 
    </compilers> 
    </system.codedom> 

compilerOptions="/langversion:6 

は7日に設定し、私はそれはあなたを思わエラーはもう、私の見解は、コンパイルされ、正しく

+0

多分[私の同様の質問](HTTP

自分のドキュメントによると、あなたはパッケージを含める必要が://stackoverflow.com/q/42700380/107625)([回答](http://stackoverflow.com/a/42712883/107625)を含む))は役立ちますか? –

+0

これには[StackExchange.Precompilation](https://github.com/StackExchange/StackExchange.Precompilation)を使用します。これらのツールの中には、C#vLatestをカミソリで使うためのビットがあります。 - https://github.com/StackExchange/StackExchange.Precompilation/blob/fd536b764983e2674a4549b7be6f26e971190c1e/Test.WebApp/Global.asax.cs#L32 –

+0

@UweKeim Iあなたの質問を見ましたが、私の場合は問題ではありません。ありがとうございます – Julien

答えて

5

を働いていたしませんでしたその後6にロールバックします実際にはC#6とC#7の機能を使用できますが、少しの作業が必要です。

は、これらのパッケージを追加します。

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform(現在は1.0.4)
  • Microsoft.Net.Compilersを(現在は2.1.0)

あなたweb.configに、このセクションを持っていることを確認してください:

<system.codedom> 
    <compilers> 
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /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.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> 
    </compilers> 
</system.codedom> 

あなたの01に必要な輸入品ファイル(自動があり、それをチェックする必要があります):これで

<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> 
<Import Project="..\packages\Microsoft.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props')" /> 

そして、この目標:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> ... </Target> 

前の答え:

あなたはので、それを使用することはできませんASP.NET MVC RazorビューエンジンはRoslynを使用してビューをコンパイルしません。したがって、C#6以上の機能(ヌル伝播演算子= C#6)を使用することはできません。

コードをC#6より前のスタイルで記述するか、Stack Exchangeが作成したような別のビューエンジンを利用するために別のパッケージを使用する必要があります。Marc Gravellhttps://github.com/StackExchange/StackExchange.Precompilationです。

Install-Package StackExchange.Precompilation.Build -Pre 

、その後Global.asax.csであなたのApplication_Startの終わりにこれを置く:

ViewEngines.Engines.Add(new RoslynRazorViewEngine()); 
+0

私は分かりません。 コンパイラーとcodeDomの最新バージョンがインストールされていても、RazorはRoslynを使用していませんか? このカスでは、なぜC#6で動作し、C#7で動作しないのか教えていただけますか? ありがとう – Julien

+0

いいえ、C#6では機能しません。5の場合は機能しません。古い 'csc' C#コンパイラを使用しています。 –

+0

奇妙な、私は現在、ヌーク伝播機能を使用しているので、私のビューではC#6の機能とそれはうまく動作しますが、C#7で動作しません。 私はあなたの解決策を試してみますが、それは奇妙です。 – Julien