【问题标题】:Visual Studio 2015 Warnings not triggered未触发 Visual Studio 2015 警告
【发布时间】:2016-09-05 05:43:20
【问题描述】:

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

我预计会触发此警告,因为这些是内部重构的结果,切换到不同的第三方组件。对我来说,这些警告非常重要,因为它们实际上表明了必须注意的 ToDo。

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

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

据我从上面的 MSDN 文档和 VS 中可配置的警告级别所见,我看不出我必须配置 VS 或项目本身的方式有什么不同。

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

编辑

提供更多信息。我在 2012 年和 2015 年都使用了重建解决方案。因此,项目的丢失重建不能成为未发布警告的原因。

类型的第三个警告

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

编辑 2

这是一个小的编码示例(只需创建一个新项目 -> 类库)。一个有趣的发现是,当我第一次创建项目时,在 VS-2012 和 VS-2015 中都出现了警告 - 所以我查看了我当前的案例,看看差异在哪里,结果证明,这标志着类为 abstract 产生 VS-2015 不再发出警告的结果。当类不是抽象类时,VS-2015 会像 V​​S-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;
    }
}

【问题讨论】:

  • 简单地说,您是否尝试过“重建解决方案”?
  • @PhillipNgan:是的,我确实触发了重建 ;-)
  • 警告标签是否启用? (突出显示)
  • 您的意思是在错误列表中?是的,它已启用,还有另外两个警告出现,但不是我上面提到的那些。将相应地编辑问题。
  • 这可能是 Roslyn 行为的改变,您能否提供可以重现该问题的简短代码?

标签: c# visual-studio compiler-warnings roslyn


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 2016-12-30
    • 2016-04-28
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多