返回

从 .NET 7 升级到 .NET 8 后,移动应用为何仅能在 macOS Visual Studio 上构建?

windows

从 .NET 7 迁移到 .NET 8 后,移动应用仅在 macOS Visual Studio 上构建

背景

在将 MAUI 项目从 .NET 7 升级到 .NET 8 后,许多用户遇到了一个问题,即他们的移动应用只能在 macOS 版本的 Visual Studio 上构建和运行。尽管在 Android 和 iOS 模拟器上构建和运行项目没有任何问题,但在 Windows 上尝试构建时却会出现各种错误。

问题根源

我们调查了这个问题,发现它可能源于以下原因:

  • Visual Studio 可能无法正确识别 .NET 8.0 SDK。
  • 目标版本未正确设置。
  • AndroidManifest 文件缺失或未正确加载。
  • 依赖关系问题或缺少的引用。

解决方案

为了解决这个问题,我们采取了以下步骤:

1. 验证 .NET 8.0 SDK 安装

确保在 Windows 机器上已安装适用于 .NET 8.0 的 SDK。可以通过在命令提示符下运行 dotnet --info 命令来验证这一点。

2. 设置目标版本

在项目文件中,确保目标版本已正确设置为 net8.0-androidnet8.0-ios

3. 重新加载 AndroidManifest 文件

在 Visual Studio 中,右键单击项目并选择 "编辑 Manifest"。然后重新保存文件以强制 Visual Studio 重新加载它。

4. 检查依赖关系

确保所有依赖项都已正确安装和引用。这可以通过运行 dotnet restore 命令来完成。

5. 编译并运行项目

使用以下命令在 CLI 中编译并运行项目:

dotnet build -t:Run --framework net8.0-android

dotnet build -t:Run --framework net8.0-ios

调试

如果编译成功,但 Visual Studio 中的调试失败,则可以尝试以下方法:

  • 启用 "Just My Code" 调试模式。
  • 将断点设置在用户代码中,而不是库或框架代码中。
  • 在输出窗口中检查错误消息。

常见问题解答

1. 为什么我的项目无法在 Visual Studio 中构建?

确保已遵循上面列出的解决方案步骤,并验证您的目标版本和依赖关系已正确设置。

2. 为什么在删除 bin 和 obj 文件夹后问题有时会消失?

这可能是由于这些文件夹中包含的损坏或过时的文件。删除这些文件夹迫使 Visual Studio 重新生成项目。

3. 为什么我收到 "obj/project.assets.json 中的 net8.0-android 没有目标" 错误?

这表明 Visual Studio 无法识别 .NET 8.0 SDK 或目标版本未正确设置。

4. 为什么我收到 "AndroidManifest 文件不存在" 错误,即使它存在?

这可能是 Visual Studio 中的错误。重新加载 AndroidManifest 文件通常可以解决这个问题。

5. 为什么我会收到关于找不到类型的错误,即使它们存在于默认 MAUI 类中?

这可能表明依赖关系存在问题。确保所有依赖项都已正确安装和引用。

结论

从 .NET 7 迁移到 .NET 8 后,如果移动应用仅在 macOS Visual Studio 上构建,则可以通过验证 .NET 8.0 SDK 安装、设置目标版本、重新加载 AndroidManifest 文件、检查依赖关系和使用 CLI 构建和运行项目来解决这个问题。在某些情况下,启用 "Just My Code" 调试模式和在用户代码中设置断点也有助于解决调试问题。