Blazor:类型或命名空间名称“App”无法找到(是否缺少使用指令或程序集引用?)

32
我已在Microsoft Visual Studio Community 2019版本16.1.3中设置了Blazor基本应用程序,并尝试了.NET Core SDK 3.0.100-preview5-011568和SDK 3.0.100-preview6-012264的两个版本。我还安装了Blazor扩展,但是当我在任何文件中没有进行修改时构建失败,报错如下:

"未找到“App”类型或命名空间。

非常感谢您的帮助。谢谢!

有关App,预览6中发生了一些变化,请查看发布说明。您的项目是从哪个版本开始的?新建项目会发生什么? - H H
我在使用VS2019时,将项目从.NET 5升级到6后仍然遇到相同的错误。对我来说,升级到最新的VS(2022/17)可以消除这个错误。 - steve
18个回答

13

对我来说,Blazor应用程序在本地构建时没有问题,但在Azure管道中无法构建。

添加App.razor.cs解决了构建问题。

using Microsoft.AspNetCore.Components;

namespace BlazorDemo.Client
{
    public partial class App : ComponentBase
    {
    }
}

13
为了使用Blazor,你需要拥有VS2019预览版或启用VS2019的预览功能,方法是勾选以下选项:

工具 -> 选项 -> 环境 -> 预览功能 -> 使用 .NET Core SDK 的预览版本

对于旧版本的VS2019,也可以这样操作:

工具 -> 选项 -> 项目和解决方案 -> .NET Core -> 使用 .NET Core SDK 的预览版本

然后重新加载解决方案并构建即可。请注意保留原有的HTML标签和格式。

我通过使用 dotnet-install.sh 升级到 .NET 版本 3.0.100 来解决了这个问题。 - Matthias Braun
1
那对于 Visual Code 呢? - wut
我正在使用VS 2019社区版,我按照上述步骤操作,但仍未显示Blazor App选项。请帮忙。 - Hardipsinh Jadeja
在我的情况下,我有一个对NuGet包预览版的引用。因此启用“使用.NET Core SDK的预览版”解决了这个问题。 - oshan2csd

11
<component type="typeof(App)" render-mode="ServerPrerendered" />

我在使用Visual Studio 2019 v16.8.2和.NET 5在一个Blazor Server应用程序中时,遇到了一个错误,指向上面一行的"App"部分(在文件_Host.cshtml中)。 在从另一个项目复制代码并遇到不同(应用程序)命名空间的问题时,当我尝试构建时,我得到了这个错误(没有其他错误)。 @SᴇM的答案帮助我解决了这个问题 - 我关闭并重新打开了我的解决方案,然后在构建时出现了命名空间错误 - 我可以解决它... 在修复它之后它就工作了。 我想评论@SᴇM的答案,但我的声望不够。

我检查了App.razor的命名空间(该文件位于同一项目中)。命名空间是该项目的命名空间。我将其添加到“_Hosts”中。"using [项目的命名空间];" - Chris Patterson

3
将此行添加到.csproj文件中,问题得到解决。
<RootNamespace>MyBlazorApp</RootNamespace>

它也可以在“属性”页面下的“默认命名空间”中进行设置。


完美运行。使用VS 2022 17.4版本。在之前的版本中可能会有所不同。未经测试。 - drewid

2

这似乎是一个通用的编译失败信息。在我的情况下,错误列表没有什么用处,但是生成输出提供了更多信息(搜索“error”),但它只有部分提示:

警告 CS8785:生成器“RazorSourceGenerator”无法生成源代码。它不会对输出产生贡献,并且可能会导致编译错误。异常类型为“KeyNotFoundException”

这还不够,所以我右键单击解决方案,选择“在终端中打开”,然后手动执行了这个命令:

dotnet build

这个命令给了我关于实际密钥未被找到的更多信息(在我的情况下是“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升级到新版本。我在VS2022中使用了.net 6,在将MudBlazor从6.02更新到6.03时遇到了此错误(后来我能够将MudBlazor更新到6.0.10)。


2
我在使用dotnet build时没有遇到任何错误,而是顺利地构建了所有内容。虽然这并不能帮助我解决与VS相关的问题,但至少让我能够继续工作。 - Lukas Willin

2
除了 @SᴇM 的回答之外,还请确保您使用的是 Visual Studio 的最新版本。对于我的情况,我按照 @SᴇM 提到的相同步骤,但仍然没有显示 Blazor 应用程序选项。

之后,我将 Visual Studio 更新到了16.3.7版本,现在在创建新项目时该选项已经可见。 :)


2
将我的.NET Core 3.1应用程序迁移到.NET 5.0后,我遇到了同样的问题。我的应用程序一直运行良好,但自从我打开App.razor文件以来,就出现了错误。
错误信息为“找不到'pageName'类型或命名空间”,并且页面正常显示。
通过工具->选项->环境->预览功能->使用.NET Core SDK的预览版本来解决了这个问题。需要重新启动Visual Studio并重新加载项目。
这有点奇怪,因为我只是转移到了.NET 5.0。

2
在我的情况下,问题出在_Host.cshtml中的命名空间定义。将其重命名为正确的命名空间解决了问题。

2

重启 Visual Studio 对我有用


这并没有解答问题。一旦您拥有足够的声誉,您就能够在任何帖子上发表评论; 相反,提供不需要询问者澄清的答案。- 来自评审 - Ghost Ops
1
@GhostOps,我不同意 - 我正在使用VS 17.2.3,在切换启动项目后遇到了这个错误。重新启动Visual Studio立即解决了问题,所以答案是正确的。 - Liam

1
对我而言,使用using语句添加命名空间起作用了。
@using PieShopHrmClientWebAssembly.App.Shared

这里的PieShopHrmClientWebAssembly.App是我的Blazor项目名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接