你好我有一个奇怪的问题。
我在像这样的剃刀页面中使用空传播功能
@(Model.ligneDossierLie?.dossier_id)
我的项目基于4.6.1 Framework,我使用的是最后一个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并且我回滚到6.之后我没有出现错误,我的观点正在编译并且正常工作
答案 0 :(得分:8)
看起来你确实可以使用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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
您csproj
文件中的所需导入(应自动存在,但请检查):
<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 Gravell指向): https://github.com/StackExchange/StackExchange.Precompilation
根据他们的文档,您必须包含该软件包:
Install-Package StackExchange.Precompilation.Build -Pre
然后将其放在Application_Start
中Global.asax.cs
的末尾:
ViewEngines.Engines.Add(new RoslynRazorViewEngine());