Пространство имен текущего проекта «не существует» только в редакторе Razor - PullRequest
2 голосов
/ 30 апреля 2019

После обновления до Visual Studio 2019 на прошлой неделе у меня возникла знакомая ошибка "Тип или имя пространства имен 'X' не существует в пространстве имен 'Y' (у вас отсутствует ссылка на сборку?)". Это происходит только в редакторе Razor в Visual Studio 2019 и относится к пространству имен текущего проекта . Я испробовал все знакомые решения, найденные по нескольким другим вопросам StackOverflow, включая очистку и перестройку, очистку всех кешей, удаление файла .suo и других файлов, созданных VS, удаление плагинов, изменение целевой платформы (и изменение ее обратно), обеспечение ссылки на пространство имен в Views / web.config и удаление ссылок на библиотеки, предназначенные для старых версий .NET Framework. Это очень распространенное сообщение об ошибке, но, насколько я могу судить, ни один из других вопросов, обсуждающих эту ошибку, не говорит о том, что Visual Studio сообщает, что не может найти пространство имен текущего проекта.

example Razor View the model class

На скриншотах показан пример. Красная волнистая линия под Web в Tasks.Web.Models показывает ошибку при обнаружении класса, показанную на втором скриншоте. Проект называется Tasks.Web. Пространство имен по умолчанию одинаково, и каждый файл класса в проекте имеет пространство имен, которое начинается с Tasks.Web.

Этот проект является проектом ASP.NET MVC 5, созданным в 2015 году, и до сих пор успешно обновлялся в VS2015 и VS2017, даже не сталкиваясь с этой проблемой. Проект все еще строится и работает; единственный реальный недостаток в том, что Intellisense продолжает показывать мне эту ошибку, и она появляется в списке ошибок как минимум один раз для каждого открытого файла представления. Мне достаточно легко продолжить работу с этой проблемой или вернуться к VS2017, но я бы лучше решил ее и, возможно, понял, почему это происходит, если это не просто ошибка. Похоже, это происходит в каждом представлении Razor, ссылающемся на класс модели, определенный в этом проекте, независимо от того, использую ли я полный путь в операторе @model или пытаюсь использовать вместо него оператор @using. Есть идеи?

Приложение : Изменение пространства имен на WebHack с помощью рефактора R # Rename имеет следующие эффекты: 1. Успешно изменяет пространство имен во всех *.cs файлах и *.cshtml файлах (показывая, что рефакторинг может обнаружить, что пространства имен совпадают). 2. Никаких изменений в поведении инструмента. Красный волнистый участок все еще там, показывая ту же ошибку для обновленного пространства имен. ПРИМЕЧАНИЕ : удален R # после выполнения этого теста без изменений.

Приложение 2 : обновлено до Visual Studio 2019, обновление 3 (16.0.3). Без изменений. Вытащил чистую копию исходного кода в новый каталог, запустил «Load Dependencies» в Visual Studio, построенном решении. Без изменений; показывает, что та же самая ошибка "не существует" в "Web" также присутствует в этой новой копии решения.

Приложение 3 : Изолировано для Visual Studio путем фактического удаления всех расширений. Удалены ссылки на Resharper в тексте вопроса.

1 Ответ

2 голосов
/ 03 мая 2019

Обновление пакета Nuget Microsoft.Net.Compilers решит проблему. Теперь Microsoft.Net.Compilers больше зависит от Roslyn. Похоже, что они добавили к нему больше, чем в предыдущих версиях, что приводит к неправильному поведению intellisense в Visual Studio 2019.

...