Просто обновлен от VS-2012 до VS-2015. Все мои проекты (библиотеки CSharp) должны быть скомпилированы с уровнем предупреждения 4 (возможно наивысший уровень). Назад в VS-2012 в одном из моих проектов, у меня есть два предупреждения типаVisual Studio 2015 Предупреждения не активированы
- 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)
Я ожидаю, что это предупреждение запускаться, поскольку они являются результатом внутреннего рефакторинга, переключаясь на другой сторонний компонент. Для меня эти предупреждения имеют решающее значение, поскольку они фактически указывают ToDo, о которых нужно позаботиться.
В VS-2015 эти предупреждения не запускаются и не отображаются в представлении «Список ошибок».
Да, я мог бы разместить там фактические комментарии ToDo, которые будут всплывать, но я не беспокоюсь о местах, о которых я знаю, но местоположения, которые будут мертвыми, заканчиваются в будущих рефакторингах, которые затем никогда не будут замечены из-за того, что VS не выпустил предупреждение.
Насколько я могу видеть из документации MSDN выше и настраиваемых уровней предупреждения в VS, я не вижу никакой разницы в том, как мне придется настраивать VS или сами проекты.
Возможно ли, что базовый компилятор «Roslyn» (в настоящее время?) Не (пока?) Способен обнаружить эти предупреждения на основе его семантического анализа? Или я пропустил что-то еще?
Редактировать
Чтобы дать некоторую дополнительную информацию. Я использую решение для восстановления в 2012 и 2015 годах. Таким образом, отсутствие восстановления проекта не может быть причиной не опубликованных предупреждений.
Третье предупреждение типа
- CS0618 Member is obsolete (уровень Предупреждение 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;
}
}
Просто, чтобы указать на очевидное, вы попробовали «Реконструкцию решения»? –
@PhillipNgan: Да, я вызвал перезагрузку ;-) – Tobias
Включена ли вкладка предупреждения? (выделено) – Mixxiphoid