Visual Studio 2015 警告未触发
Visual Studio 2015 Warnings not triggered
刚从 VS-2012 升级到 VS-2015。我的所有项目(CSharp 库)都设置为使用警告级别 4(可能的最高级别)进行编译。回到我的一个项目中的 VS-2012,我有两个类型的警告
- CS0414 The private field is assigned but its value is never used(警告级别 3)
- CS0649 The private field is never assigned to and will always have its default value(警告级别 4)
我预计会触发此警告,因为这些是内部重构的结果,切换到不同的第三方组件。对我来说,这些警告至关重要,因为它们实际上表明必须处理的待办事项。
但是在 VS-2015 中,这些警告不会被触发,也不会出现在 "Error list" 视图中。
是的,我可以将实际的 ToDo 评论放在那里,然后会弹出,但我不担心我知道的位置,但在未来的重构中将成为死胡同的位置可能永远不会出现由于 VS 未发出警告而注意到。
据我从上面的 MSDN 文档和 VS 中的可配置警告级别中看到的,我看不出我必须配置 VS 或项目本身的方式有任何区别。
底层 "Roslyn" 编译器是否(目前?)不能(还?)能够根据其语义分析检测到这些警告?还是我漏掉了什么?
编辑
提供一些进一步的信息。我在 2012 年和 2015 年都使用重建解决方案。因此项目重建缺失不能成为未发布警告的原因。
类型的第三个警告
- CS0618 Member is obsolete(警告级别 2)
出现在 VS-2012 和 VS-2015 中
编辑 2
这是一个小的编码示例(只需创建一个新项目 -> class 库)。一个有趣的发现是,当我第一次创建项目时,警告出现在 VS-2012 和 VS-2015 中 - 所以我查看了我当前的案例以查看差异在哪里,结果证明,标记class 作为 abstract
会产生 VS-2015 不再发出警告的结果。当 class 不是抽象时,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 Update 3 中的错误。我在 Roslyn 的 GitHub 存储库中就此提出了一个问题.对于遇到相同问题的其他人,here 您可以跟踪该问题的状态。
刚从 VS-2012 升级到 VS-2015。我的所有项目(CSharp 库)都设置为使用警告级别 4(可能的最高级别)进行编译。回到我的一个项目中的 VS-2012,我有两个类型的警告
- CS0414 The private field is assigned but its value is never used(警告级别 3)
- CS0649 The private field is never assigned to and will always have its default value(警告级别 4)
我预计会触发此警告,因为这些是内部重构的结果,切换到不同的第三方组件。对我来说,这些警告至关重要,因为它们实际上表明必须处理的待办事项。
但是在 VS-2015 中,这些警告不会被触发,也不会出现在 "Error list" 视图中。
是的,我可以将实际的 ToDo 评论放在那里,然后会弹出,但我不担心我知道的位置,但在未来的重构中将成为死胡同的位置可能永远不会出现由于 VS 未发出警告而注意到。
据我从上面的 MSDN 文档和 VS 中的可配置警告级别中看到的,我看不出我必须配置 VS 或项目本身的方式有任何区别。
底层 "Roslyn" 编译器是否(目前?)不能(还?)能够根据其语义分析检测到这些警告?还是我漏掉了什么?
编辑
提供一些进一步的信息。我在 2012 年和 2015 年都使用重建解决方案。因此项目重建缺失不能成为未发布警告的原因。
类型的第三个警告- CS0618 Member is obsolete(警告级别 2)
出现在 VS-2012 和 VS-2015 中
编辑 2
这是一个小的编码示例(只需创建一个新项目 -> class 库)。一个有趣的发现是,当我第一次创建项目时,警告出现在 VS-2012 和 VS-2015 中 - 所以我查看了我当前的案例以查看差异在哪里,结果证明,标记class 作为 abstract
会产生 VS-2015 不再发出警告的结果。当 class 不是抽象时,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 Update 3 中的错误。我在 Roslyn 的 GitHub 存储库中就此提出了一个问题.对于遇到相同问题的其他人,here 您可以跟踪该问题的状态。