Visual Studio 2015警告未触发

本文关键字:警告 Studio 2015 Visual | 更新日期: 2023-09-27 18:05:50

刚刚从VS-2012升级到VS-2015。我所有的项目(CSharp库)都设置为使用4(可能的最高级别)的警告级别进行编译。回到VS-2012,在我的一个项目中,我有两个类型为

的警告。
  • CS0414私有字段被分配,但它的值从未被使用(警告级别3)
  • CS0649私有字段永远不会被分配,并且始终具有其默认值(警告级别4)

我希望触发这些警告,因为它们是内部重构的结果,切换到不同的第三方组件。对我来说,这些警告是至关重要的,因为它们实际上表明了必须注意的待办事项。

在VS-2015中,这些警告不会被触发,也不会出现在"错误列表"视图中。

是的,我可以把实际的ToDo注释放在那里,然后会弹出,但我不担心我知道的位置,但是这些位置将在未来的重构中成为死胡同,然后可能永远不会被注意到,因为VS没有发出警告。

就我从上面的MSDN文档和VS中可配置的警告级别来看,我看不出我必须配置VS或项目本身的方式有任何差异。

是否有可能,底层的"Roslyn"编译器(目前?)不(还?)能够根据其语义分析检测这些警告?还是我遗漏了什么?

编辑

给出一些进一步的信息。我在2012年和2015年都使用重建解决方案。因此,缺少项目的重建不能作为不发布警告的原因。

类型为

的第三个警告
  • CS0618成员已过时(警告级别2)

同时出现在VS-2012和VS-2015

编辑2

下面是一个小的编码示例(只是创建一个新的项目->类库)。一个有趣的发现是,当我第一次创建项目时,警告发生在VS-2012和VS-2015中-所以我查看了我当前的案例,看看差异在哪里,结果是,将类标记为abstract产生VS-2015不再发出警告的结果。当类不是抽象的时候,VS-2015会像VS-2012那样发出警告。但在我看来,抽象的情况应该无关紧要,因为字段无论如何都被声明为私有的。
// When the class is being marked as abstract, VS-2015 will not issue any warning.
// When the class is not abstract the warnings are issued.
public abstract class Demonstrator
{
    // This should trigger warning CS0169 Warning Level 2
    private int _UnusedField;
    // This should trigger warning CS0414 Warning Level 4
    private int _AssignedButNotReadField;
    public Demonstrator()
    {
        _AssignedButNotReadField = 1;
    }
}

Visual Studio 2015警告未触发

所以事实证明,这种行为实际上被认为是当前版本的Visual Studio 2015 Update 3中的一个错误。我在Roslyn的GitHub仓库上打开了一个问题。对于遇到相同问题的其他人,您可以在这里跟踪该问题的状态。