ASP.NET属性表达式体导致构建失败。

27 浏览
0 Comments

ASP.NET属性表达式体导致构建失败。

我刚刚开始在Visual Studio 2017中处理我的旧解决方案。只需在旧的IDE中打开解决方案即可无缝工作。\nC#应用程序项目现在默认使用C# 7.0编译器。这些项目的属性页(编译/高级)可以轻松选择编译器的目标语言版本,默认为最新版本。\n然而,我无法找到一种方式在ASP.NET Web项目中启用C# 7.0。\n如果我编写如下语句:\n

if (int.TryParse("1", out int myInt)) { ... }

\nIDE会警告我需要使用7+版本的语言。\n我对此进行的研究显示,我应该在web.config文件的system.codedom编译器区域中指定C#的特定版本,以便针对最新的Roslyn版本进行目标设置。\n目前我的设置是:\n

  
    
      

\n它针对C# 6。如果我已经通过NuGet下载了最新的Roslyn,那么正确的C# 7设置是什么?\n更新:\n这是一个Web项目的可用编译选项的屏幕截图(它是意大利语的VS2017,但应该很容易理解)。在那里没有选择目标C#版本的可能性。\n\"Compile

0
0 Comments

ASP.NET Property expression bodies cause build to fail的问题出现的原因是,当尝试安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform 2.0.0版本,并且项目的目标.NET版本早于4.6时,它会自动使用一个旧版本的roslyn,该版本只支持langversion 6。这是因为较新的roslyn版本,包括第一个支持csharp-7的版本,需要至少.NET-4.6才能运行。如果项目的目标.NET版本较旧,将会出现以下错误信息:

CS1617 Invalid option 'latest' for /langversion; must be ISO-1, ISO-2, Default or an integer in range 1 to 6.

要解决这个问题,可以按照以下步骤进行操作:

1. 确保项目的目标.NET版本至少为.NET-4.6,如果需要的话进行重新定位。

2. 如果项目仍然使用packages.config文件,则必须卸载并重新安装Microsoft.CodeDom.Providers.DotNetCompilerPlatform,以更新项目文件指向.NET-4.6变体的NuGet包。如果使用的是,则无需操作(但需要手动配置web.config文件的system.codedom部分)。

需要注意的是,Microsoft.CodeDom.Providers.DotNetCompilerPlatform以前依赖于Microsoft.Net.Compilers,因此如果升级旧项目,请确保两个包都已更新,或者如果不再需要Microsoft.Net.Compilers,则将其删除。

这样就可以解决ASP.NET Property expression bodies cause build to fail的问题了。

0
0 Comments

ASP.NET Property expression bodies cause build to fail的问题出现的原因是在使用C# 7选项时编译失败。通过将语言版本设置为默认可以解决此错误。如果在使用Roslyn而不是使用Visual 2017默认编译器构建时,可能需要进行一些额外的更改。在项目名称上右键单击,选择属性窗口,然后在"Conditional Compilation symbols"文本框中添加以下两个选项:__DEMO__,__DEMO_EXPERIMENTAL__。此外,还需要安装最新版本的Microsoft.Net.Compilers(2.0+)来使用C# 7.0版本。因此,最佳解决方案是安装最新版本的Microsoft.Net.Compilers(2.0+)。需要注意的是,"Advanced Build Settings"对话框仅适用于桌面和控制台应用程序,而不适用于Web项目。对于Web项目,需要手动编辑web.config文件。安装了编译器的2.0+版本后,可以选择C# 7的语言版本。在ASP.NET MVC应用程序和ASP.NET Core Web应用程序中,都可以使用C# 7.0语言设置选项。

0
0 Comments

问题的原因是使用ASP.NET的属性表达式体导致构建失败。解决方法如下:

1. 在网站的NuGet窗口中,先卸载Microsoft.CodeDom.Providers.DotNetCompilerPlatform包,然后重新安装。

2. 在web.config文件中,找到system.codedom > compilers > compiler节点,将compilerOptions属性的值从"/langversion:6"改为"/langversion:7"。

3. 如果要使用C# 7的元组功能,还需要从NuGet安装System.ValueTuple包。

4. 如果以上方法都不起作用,可以尝试安装新版本的Microsoft.CodeDom.Providers.DotNetCompilerPlatform(1.0.4),该版本支持在Web项目中使用C# 7。注意项目需要针对4.6及以上版本的.NET Framework,因为Roslyn编译器2.0需要.NET Framework 4.6。

5. 如果在编译之后出现错误"Could not find a part of the path … bin\roslyn\csc.exe",可以参考链接(https://stackoverflow.com/a/32780433/5091529)中提供的解决方法。

6. 另外,还可以使用"/langversion:latest"或"/langversion:default"作为compilerOptions的值,这两个选项类似。具体可参考文档(https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/langversion-compiler-option)。

7. 最后,记得在修改完web.config后重新启动Visual Studio。

0