繁体   English   中英

CS0429-使用MSBuild 4检测到无法到达的表达式代码,但未检测到14

[英]CS0429 - Unreachable expression code detected with MSBuild 4, but not 14

以下代码示例演示了Visual Studio 2012和2015(MSBuild 4和14)之间的区别。 它基于本文中的描述:

编译器警告(等级4)CS0429

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM