Поделиться через


Разрешение известных проблем

В этой статье описываются некоторые известные проблемы с пользовательским интерфейсом приложений .NET (.NET MAUI), а также способы их решения или решения. Репозиторий .NET MAUI также подробно описывает некоторые известные проблемы.

Не удается найти рабочие нагрузки MAUI .NET

Существует два варианта установки рабочих нагрузок MAUI .NET:

  1. Visual Studio в Windows может устанавливать .msi файлы для каждого пакета рабочей нагрузки.
  2. dotnet workload install Команды.

В Windows при установке dotnet workload install .NET MAUI с помощью установщика Visual Studio Visual Studio Visual Studio может ввести состояние, в котором не удается найти рабочие нагрузки .NET MAUI. Вы получите ошибки сборки, сообщающие о установке рабочих нагрузок .NET MAUI, и можно ввести состояние, в котором рабочие нагрузки не могут быть восстановлены или переустановированы. Дополнительные сведения см. в статье о проблеме GitHub dotnet/sdk#22388.

Windows

Решение этой проблемы в Windows заключается в удалении рабочих нагрузок .NET MAUI через ИНТЕРФЕЙС командной строки, удалении всех пакетов SDK для .NET в панель управления и удалении рабочих нагрузок .NET MAUI в Visual Studio. Эти удаления можно выполнить с помощью следующего процесса:

  1. Запустите, dotnet workload uninstall maui если вы когда-либо использовали dotnet workload install команды.
  2. Удалите все автономные установщики пакета SDK для .NET из панель управления. Эти установщики имеют имена, аналогичные Microsoft .NET SDK 6.0.300именам.
  3. В каждом экземпляре Visual Studio удалите разработку пользовательского интерфейса многоплатформенного приложения .NET и рабочие нагрузки visual Studio для разработки классических приложений .NET.

Затем проверьте наличие дополнительных .msi файлов, которые необходимо удалить, выполнив следующую команду:

reg query HKLM\SOFTWARE\Microsoft\Windows\currentversion\uninstall\ -s -f manifest

Эта reg query команда содержит пакеты SDK для .NET 6 и более поздних версий, которые по-прежнему установлены на компьютере, например:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\currentversion\uninstall\{EEC1BB5F-3391-43C2-810E-42D78ADF3140}
    InstallSource    REG_SZ    C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.MacCatalyst.Manifest-6.0.300,version=125.179.40883,chip=x64,productarch=neutral\
    DisplayName    REG_SZ    Microsoft.NET.Sdk.MacCatalyst.Manifest-6.0.300

Если вы получаете аналогичные выходные данные, скопируйте GUID для каждого пакета и удалите пакет с msiexec помощью команды:

msiexec /x {EEC1BB5F-3391-43C2-810E-42D78ADF3140} /q IGNOREDEPENDENCIES=ALL

Затем необходимо продолжать выполнять reg query команду, пока она не возвращает результаты. После удаления всех пакетов SDK для .NET 6+ следует также удалить следующие папки:

  • C:\Program Files\dotnet\sdk-manifests
  • C:\Program Files\dotnet\metadata
  • C:\Program Files\dotnet\packs
  • C:\Program Files\dotnet\library-packs
  • C:\Program Files\dotnet\template-packs
  • C:\Program Files\dotnet\sdk\6.* или C:\Program Files\dotnet\sdk\7.*
  • C:\Program Files\dotnet\host\fxr\6.* или C:\Program Files\dotnet\host\fxr\7.*

После выполнения этого процесса вы сможете переустановить .NET MAUI через Visual Studio или установить выбранную версию пакета SDK для .NET и выполнить dotnet workload install maui команду.

Версия платформы отсутствует

Visual Studio может не разрешать необходимые рабочие нагрузки, если попытаться скомпилировать проект и получить ошибку, аналогичную следующему тексту:

Версия платформы отсутствует для одной или нескольких целевых платформ, даже если они указали платформу: net8.0-android, net8.0-ios, net8.0-maccatalyst

Эта проблема обычно приводит к установке пакета SDK x86 и x64 и используемой версии x86. Для Visual Studio и .NET MAUI требуется пакет SDK для .NET x64. Если у вашей операционной системы есть системная PATH переменная, разрешающая пакет SDK x86, сначала необходимо исправить это, удалив пакет SDK x86 .NET из PATH переменной или продвигая пакет SDK x64 для .NET, чтобы сначала разрешить его. Дополнительные сведения об устранении неполадок с разрешением пакета SDK для x86 и x64 см. в статье "Установка .NET в Windows — устранение неполадок".

Тип или пространство имен "Default" не существует

При использовании Contacts API может появиться следующая ошибка, связанная с iOS и macOS:

The type or namespace name 'Default' does not exist in the namespace 'Contacts' (are you missing an assembly reference?)

Платформы iOS и macOS содержат корневое пространство Contactsимен. Этот конфликт вызывает конфликт для этих платформ с Microsoft.Maui.ApplicationModel.Communication пространством имен, которое содержит Contacts тип. Пространство Microsoft.Maui.ApplicationModel.Communication имен автоматически импортируется <ImplicitUsings> параметром в файле проекта.

Чтобы написать код, который также компилируется для iOS и macOS, полностью квалифицируйте Contacts тип. Кроме того, предоставьте using директиву в верхней части файла кода для сопоставления Communication пространства имен:

using Communication = Microsoft.Maui.ApplicationModel.Communication;

// Code that uses the namespace:
var contact = await Communication.Contacts.Default.PickContactAsync();

Xcode в настоящее время не установлен или не найден

После установки средств командной строки Xcode с помощью xcode-select --installVisual Studio Code может отобразить сообщение "Xcode не установлено или не найдено" при попытке создать приложения .NET MAUI, предназначенные для iOS или Mac Catalyst. В этом сценарии убедитесь, что у вас также установлен Xcode из App Store. Затем запустите Xcode и перейдите к средствам командной строки "Расположения Xcode > >" > и проверьте, пуст ли раскрывающийся список. Если это пусто, выберите раскрывающийся список и выберите расположение средств командной строки Xcode. Затем закройте Xcode и перезапустите Visual Studio Code.

Не удалось найти допустимый пакет приложений Xcode

Если при попытке создать приложения .NET MAUI, предназначенные для iOS или Mac Catalyst, не удалось найти допустимое пакет приложений Xcode, попробуйте использовать решение, описанное в Xcode, в настоящее время не установлено или не найдено. Если вы по-прежнему не сможете получить доступ к раскрывающимся спискам средств командной строки "Расположения > Xcode>">, выполните следующую команду:

sudo xcode-select --reset

Не удается найти версию Xcode

В некоторых сценариях создание приложения .NET MAUI на iOS или Mac Catalyst может попытаться использовать версию Xcode, которая больше не установлена на компьютере. Когда это происходит, вы получите сообщение об ошибке, аналогичное следующему:

xcodebuild: error: SDK "/Applications/Xcode_14.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk" cannot be located.
xcrun: error: sh -c '/Applications/Xcode_14.1.app/Contents/Developer/usr/bin/xcodebuild -sdk /Applications/Xcode_14.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -find dsymutil 2> /dev/null' failed with exit code 16384: (null) (errno=Invalid argument)
xcrun: error: unable to find utility "dsymutil", not a developer tool or in PATH

При создании приложения .NET для iOS и .NET для Mac Catalyst используйте следующий процесс для определения используемой версии Xcode:

  1. MD_APPLE_SDK_ROOT Если переменная среды задана, используйте его значение.
  2. Если файл ~/Library/Settings/Xamarin/Settings.plist существует, используйте значение, определенное внутри него.
  3. Используйте значение xcode-select -p.
  4. Используйте /Applications/Xcode.app.

Поэтому рекомендуемый подход к указанию расположения Xcode на компьютере заключается в том, чтобы задать MD_APPLE_SDK_ROOT переменную среды в путь версии Xcode. Дополнительные сведения см. в статье "Сборка с определенной версией Xcode".

Затем вы можете безопасно удалить ~/Library/Settings/Xamarin/Settings.plist с компьютера.

Диагностика проблем в гибридных приложениях Blazor

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

  1. Включите BlazorWebView и связанные компоненты для журналов диагностических сведений.
  2. Настройте средство ведения журнала для записи выходных данных журнала в том месте, где его можно просмотреть.

Дополнительные сведения см. в статье "Диагностика проблем в гибридных приложениях Blazor".

Отключение упаковки изображений

Чтобы устранить неполадки, упаковка ресурсов образа может быть отключена, задав $(EnableMauiImageProcessing) свойство false сборки в первом <PropertyGroup> узле в файле проекта:

<EnableMauiImageProcessing>false</EnableMauiImageProcessing>

Отключение упаковки экрана-заставки

Для устранения неполадок создание ресурсов экрана-заставки можно отключить, задав $(EnableSplashScreenProcessing) для свойства сборки значение false в первом <PropertyGroup> узле в файле проекта:

<EnableSplashScreenProcessing>false</EnableSplashScreenProcessing>

Отключение упаковки шрифтов

Чтобы устранить неполадки, упаковка ресурсов шрифта может быть отключена, установив $(EnableMauiFontProcessing) для свойства false сборки значение в первом <PropertyGroup> узле в файле проекта:

<EnableMauiFontProcessing>false</EnableMauiFontProcessing>

Отключение упаковки файлов ресурсов

Чтобы устранить неполадки, упаковка ресурсов файлов активов может быть отключена, задав $(EnableMauiAssetProcessing) свойству сборки значение false в первом <PropertyGroup> узле в файле проекта:

<EnableMauiAssetProcessing>false</EnableMauiAssetProcessing>

Создание пустого экрана-заставки

В целях устранения неполадок можно создать пустой экран-заставку, если у вас нет <MauiSplashScreen> элемента и у вас нет настраиваемого экрана-заставки. Это можно сделать, установив для свойства true сборки $(EnableBlankMauiSplashScreen) значение в первом <PropertyGroup> узле в файле проекта:

<EnableBlankMauiSplashScreen>true</EnableBlankMauiSplashScreen>

Создание пустого экрана-заставки переопределяет любой настраиваемый экран-заставку и приведет к отклонению магазина приложений. Однако это может быть полезный подход к тестированию, чтобы убедиться, что пользовательский интерфейс приложения правильный.

Ошибки повторяющихся имен файлов изображений

Вы можете столкнуться с ошибками сборки для повторяющихся имен файлов образа:

Обнаружено одно или несколько повторяющихся имен файлов. Все выходные имена файлов изображения должны быть уникальными.

Это происходит для MauiIcon и MauiImage элементов, так как из .NET 8 .NET MAUI проверяет наличие повторяющихся имен файлов ресурсов образа.

Ошибка возникает при наличии одинаковых имен файлов в нескольких папках и в определенных случаях при наличии идентичных имен файлов с разными расширениями в разных папках. Например, ошибка сборки будет возникать для PNG-файла в resources/Images/PNG/dotnet_bot.png и SVG-файла в Resources/Images/SVG/dotnet_bot.svg , так как ФАЙЛЫ SVG преобразуются в PNG-файлы во время сборки.

Ошибка также возникает, если Include атрибут используется для MauiImage элемента для включения всех изображений в папку, а затем также включает определенный файл изображения:

<MauiImage Include="Resources\Images\*" />
<MauiImage Include="Resources\Images\dotnet_bot.svg" BaseSize="168,208" />

Если эта ошибка сборки устранена, убедитесь, что файл проекта не содержит повторяющихся образов. Для этого измените любой MauiIcon или MauiImage ссылающийся на определенный файл, чтобы использовать Update атрибут вместо атрибута Include :

<MauiImage Include="Resources\Images\*" />
<MauiImage Update="Resources\Images\dotnet_bot.svg" BaseSize="168,208" />

Сведения об атрибутах элемента MSBuild см. в разделе "Элемент Item" (MSBuild): Атрибуты и элементы.