Razor & null 传播 - 在显式 C# 6 MVC 5 项目下不工作

Ren*_*bis 8 asp.net asp.net-mvc razor asp.net-mvc-5 c#-6.0

当前的项目:

我的剃刀代码:

@if(Session["Type"]?.ToString() == "Insurance") {
  <text>policy of insurance</text>
} else if(Session["Type"]?.ToString() == "Warranty") {
  <text>policy of warranty</text>
} else {
  <text>protection policy</text>
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio 明确地将此标记为错误,

功能“空传播运算符”在 C# 5 中不可用。请使用语言版本 6 或更高版本。

和Visual Studio明确使用C#6:

在此处输入图片说明

当我尝试运行页面本身时,出现错误:

CS1525:无效的表达式术语“.”

这表明它明确地在问号后面的句点之后。

这个项目明确作为一个 C# 6 项目开始,我很困惑为什么它重新回到 C#5。

另一个奇怪的问题:这在调试和我的本地测试设置中都运行得很好(我发布到文件系统,使用本地 IIS 查看),但是当我上传到服务器(它有很多其他 C#6网站)它废话了。这是我遇到的第一个真正引发如此严重错误的剃刀方面的怪癖。

小智 12

我遇到了类似的问题,发现我的 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.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /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.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
</system.codedom>
Run Code Online (Sandbox Code Playgroud)