Blazor, тип или имя пространства имен 'App' не может быть найдено (вам не хватает директивы using или ссылки на сборку?)

Я настроил базовое приложение в Blazor в Microsoft Visual Studio Community 2019 версии 16.1.3, и я пробовал обе версии.NET Core SDK 3.0.100-preview5-011568 и SDK 3.0.100-preview6-012264, также у меня было установил расширение Blazor, но когда я делаю сборку без каких-либо изменений в каких-либо файлах, сборка завершается со следующей ошибкой.

"Тип или пространство имен"App"не найдены.

Любая помощь будет высоко оценена. Благодарю.

18 ответов

Решение

Чтобы использовать Blazor, вам необходимо иметь предварительную версию VS2019 или включить функции предварительного просмотра на VS2019, проверив

Сервис -> Параметры -> Среда -> Функции предварительного просмотра -> Использовать предварительный просмотр.NET Core SDK

или на более старых версиях VS2019

Сервис -> Параметры -> Проекты и решения -> .NET Core -> Использовать предварительные просмотры.NET Core SDK

установите флажок, затем перезагрузите решение и выполните сборку.

Для меня приложение Blazor создавалось локально, а не в конвейере Azure.

Добавление App.razor.cs решило проблему сборки.

      using Microsoft.AspNetCore.Components;

namespace BlazorDemo.Client
{
    public partial class App : ComponentBase
    {
    }
}
<component type="typeof(App)" render-mode="ServerPrerendered" />

Полученная мной ошибка (при использовании Visual Studio 2019 v16.8.2 и.NET 5 в приложении Blazor Server) указывала на часть "Приложение" в строке выше (в файле _Host.cshtml). Это произошло после копирования некоторого кода из другого проекта и возникновения проблем с другим пространством имен (приложения), я получил эту ошибку (и никаких других) при попытке сборки. Ответ @SᴇM помог мне решить проблему - я закрыл и снова открыл свое решение, а затем при сборке получил ошибки пространства имен, которые я мог решить... после исправления, что оно сработало.

Я бы прокомментировал решение @SᴇM, но у меня недостаточно "репутации".

Добавление этой строки в .csproj исправило это для меня.

      <RootNamespace>MyBlazorApp</RootNamespace>

Его также можно установить на странице «Свойства» в разделе «Пространство имен по умолчанию».

В моем случае проблема заключалась в определении пространства имен в _Host.cshtml. Переименование его в правильное пространство имен решило проблему.

Это похоже на общее сообщение о том, что компиляция не удалась. В моем случае список ошибок был бесполезен, но в Build Output было больше информации (ищите «ошибка»), но в нем был только частичный намек:

предупреждение CS8785: генератору RazorSourceGenerator не удалось создать источник. Это не повлияет на вывод, и в результате могут возникнуть ошибки компиляции. Исключение имело тип KeyNotFoundException.

Этого все еще было недостаточно, поэтому я щелкнул правой кнопкой мыши решение и выбрал «открыть в терминале», а там я выполнил эту команду вручную:

сборка дотнета

И это дало мне дополнительную информацию о том, что фактический ключ не найден («TableItem» в моем случае). Это привело меня к некоторым пробам и ошибкам, и у меня было несколько конфликтующих библиотек (пользовательская копия BlazorTable и новая версия MudBlazor nuget) с похожими именами компонентов.

      I renamed <Table> to <BlazorTable>, and later to <BlaTable> 
(and ended up using <BlazorTable.BlaTable> to avoid repeating the namespace in class name)

Поскольку я все еще получал ошибки, я также удалил все «@using BlazorTable» и вместо этого включил пространство имен во все теги, включая значения атрибутов в случаях перечисления:

      <BlazorTable.BlaTable TableItem="BillPlanListModel"
    Items=Rows 
    SelectionType=BlazorTable.SelectionType.Single>
        <BlazorTable.Column TableItem="BillPlanListModel" />
</BlazorTable.BlaTable>

Это было немного болезненно, но в моем случае это помогло после нескольких часов работы, и теперь я мог обновить MudBlazor до новой версии. Я использовал .net 6 в VS2022 и получил эту ошибку при обновлении MudBlazor с 6.02 до 6.03 (позже мне удалось обновить MudBlazor до 6.0.10).

После переноса моего приложения.NET Core 3.1 на.NET 5.0 я столкнулся с той же проблемой. Мое приложение работало нормально, но с тех пор, как я открыл файл App.razor, появились ошибки.

"не удалось найти тип или имя пространства имен 'pageName'", и страницы отображаются нормально.

Устранена проблема с Инструменты -> Параметры -> Среда -> Функции предварительного просмотра -> Использовать предварительные версии.NET Core SDK. Также потребовался перезапуск Visual Studio и перезагрузка проекта.

Что немного странно, поскольку я только что перешел на.NET 5.0

Перезагрузка Visual Studio сработала для меня

В дополнение к ответу @SᴇM убедитесь, что вы используете последнюю версию Visual Studio. В моем случае я выполнил те же шаги, упомянутые @SM, но по-прежнему опция Blazor App не отображается.

После этого я обновил визуальную студию до 16.3.7, и теперь опция отображается при создании нового проекта.:)

В моем случае проблема заключалась в том, что в моем файле csproj была следующая ссылка на пакет:

<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />

Удаление этого устранило проблему.

Следующий вывод в моем файле build.log помог мне отследить это.

1>/usr/local/share/dotnet/sdk/3.1.402/Sdks/Microsoft.NET.Sdk.Razor/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets(404,5): warning RAZORSDK1006: Detected Razor language version downgrade. This is typically caused by a reference to the Microsoft.AspNetCore.Razor.Design package. Consider removing this package reference.

У меня была точно такая же ошибка при создании проекта Blazor, и я смог ее решить, сохранив только одну основную версию каждого .NET SDK.

До того, как я установил:

  • .NET 5 SDK
  • .NET 6 SDK
  • Пакет SDK для .NET 7.0.4xx
  • Пакет SDK для .NET 7.0.1xx

Различные основные и второстепенные версии SDK хранятся рядом. Сохранение только одного SDK для .NET 7 (в моем случае я удалил версию 7.0.4xx) устранило ошибку.

Полный контекст: у меня было несколько SDK для .NET 7, поскольку я использовал версию Visual Studio 2022 LTSC: https://learn.microsoft.com/en-us/visualstudio/productinfo/vs-servicing#long-term-servicing- канал-ltsc-поддержка

В моей версии Visual Studio 2022 (17.4) использовалась версия 7.0.1xx, но я также по ошибке установил более новую версию. Когда VS создавал мое решение, он использовал новейшую версию SDK вместо своей собственной, у которой были небольшие проблемы совместимости с генератором исходного кода; он выдавал мне предупреждения о сборке следующего содержания:Warning CS9057 The analyzer assembly 'C:\Program Files\dotnet\sdk\7.0.307\Sdks\Microsoft.NET.Sdk.Razor\source-generators\Microsoft.NET.Sdk.Razor.SourceGenerators.dll' references version '4.6.0.0' of the compiler, which is newer than the currently running version '4.4.0.0'.

Если вы посмотрите в разделе «Установленные программы», там будет указана версия SDK для Visual Studio, например Microsoft .NET SDK 7.0.110 из Visual Studio . Это версия, которую должен использовать VS, но, похоже, ее перепутали с установленной более новой версией (7.0.4xx).

Для меня сработало добавление пространства имен с помощью оператора using.

      @using PieShopHrmClientWebAssembly.App.Shared

Здесь PieShopHrmClientWebAssembly.App - это имя моего проекта Blazor.

Моя IDE (Rider) добавила<ItemGroup>тег с парой файлов (с тегом<AdditionalFiles>tag) в csproj после некоторой очистки проекта. Их удаление решило проблемы для меня.

В дополнение к ответу @Jonno, если вы копируете файлы бритвы, вам нужно изменить действие сборки на Content в свойствах файла

Для тех, кто использует Blazor, я получал эту ошибку и беспокоился о пространствах имен. Оказалось, что у меня на странице был неверный тег:

      <button type="button" @onclick="@(() => SetActivity("Office"))>Office</button>

(обратите внимание на отсутствие кавычек в событии onclick)

Этого было достаточно, чтобы вызвать эту явно несвязанную ошибку (хотя Райдер аккуратно подчеркнул тег закрывающей кнопки, указывая, что он не закрывает ничего, что понял).

Я выполнял очистку кода, включая удаление ненужных операторов использования, и начал получать эту ошибку. Я (или инструмент) удалил использование сайта из _Imports.razor, исправил его.

Добавление

      @using {Site.Client}
@using {Site.Client}.Shared

вернуться к моему _Imports.razor устранил проблему.

Переименование моего проекта с «App» на «GCL-App» сработало для меня, поскольку оно вызывает «проблему с циклической зависимостью, включая указанную выше ошибку.

У меня была аналогичная ошибка, и перезапуск Visual Studio 2019 исправил ее.

Другие вопросы по тегам