为什么用/ langversion:latest编译时未报告C#CS0136错误>

问题描述 投票:0回答:1

下面的代码在Debug中可正常编译,但由于Release中的CS0136(无法对名为'x'的本地或参数进行贴标..)错误而失败。有人知道为什么在调试版本中未报告该错误吗?

public void test()
{
    Action<int> a = x => x++;
    int x = 0;
}

目标框架4.6.1VS版本:16.4.3和16.4.5MSBuildVersion:16.4.0MSBuildRuntimeVersion = 4.0.30319

经过一些调查,我能够将错误追溯到调试和发行版本之间的配置差异

调试版本在配置中有此行,但发行版本中没有。

    <LangVersion>latest</LangVersion>

并且可以通过以下两个命令来重现此问题

csc.exe /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /langversion:7.3 Program.cs"
csc.exe /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /langversion:latest Program.cs"

下面的代码在Debug中可正常编译,但由于Release中的CS0136(无法对名为'x'的本地或参数进行贴标..)错误而失败。有人知道为什么在调试版本中未报告错误吗? ...

c# lambda scope msbuild roslyn
1个回答
0
投票

我能够找到部分答案:This question问了同样的事情。 @Hans Passant引用This Document的注释表示放宽了lambda的作用域规则。

© www.soinside.com 2019 - 2024. All rights reserved.