下面的代码在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'的本地或参数进行贴标..)错误而失败。有人知道为什么在调试版本中未报告错误吗? ...
我能够找到部分答案:This question问了同样的事情。 @Hans Passant引用This Document的注释表示放宽了lambda的作用域规则。