[英]CS0429 - Unreachable expression code detected with MSBuild 4, but not 14
以下代码示例演示了Visual Studio 2012和2015(MSBuild 4和14)之间的区别。 它基于本文中的描述:
namespace UnitTestProject1
{
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UnitTest1
{
[TestMethod]
public void Test_CS0429()
{
if (false && ReturnTrue()) // CS0429
{
Assert.Fail();
}
}
static bool ReturnTrue(){return true;}
}
}
当我使用MSBuild 4编译此代码时,我正确地收到警告CS0429,但是当我在MSBuild 14中编译相同的代码时,我没有收到警告。 该行为在Visual Studio中是可重复的。
我正在使用的MSBuild的特定版本是4.6.1055.0和14.0.25420.1。
谁能解释这种差异,我希望/期望这些警告在版本之间保持一致?
可能相关的是正在播放的csc.exe版本
C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ csc.exe版本1.3.1.60616
和....相比:
C:\\ WINDOWS \\ Microsoft.NET \\ Framework \\ v4.0.30319 \\ Csc.exe版本4.6.1055.0
早期版本的C#编译器报告此错误是一个错误。 这是编译工程师过度概括语言规范要求的结果。 参见https://github.com/dotnet/roslyn/issues/16147
C#语言规范要求编译器对不可达的语句产生警告。 但是,C#语言没有“可达表达式”的概念。 语言规范对可到达性进行了仔细的定义,但这是一个仅适用于语句而不适用于表达式的概念。 较新的编译器将不再报告此错误,并且我们也没有计划重新引入该错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.