Разрешение известных проблем
В этой статье описываются некоторые известные проблемы с пользовательским интерфейсом приложений .NET (.NET MAUI), а также способы их решения или решения. Репозиторий .NET MAUI также подробно описывает некоторые известные проблемы.
Не удается найти рабочие нагрузки MAUI .NET
Существует два варианта установки рабочих нагрузок MAUI .NET:
- Visual Studio в Windows может устанавливать .msi файлы для каждого пакета рабочей нагрузки.
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. Эти удаления можно выполнить с помощью следующего процесса:
- Запустите,
dotnet workload uninstall maui
если вы когда-либо использовалиdotnet workload install
команды. - Удалите все автономные установщики пакета SDK для .NET из панель управления. Эти установщики имеют имена, аналогичные
Microsoft .NET SDK 6.0.300
именам. - В каждом экземпляре 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 --install
Visual 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:
MD_APPLE_SDK_ROOT
Если переменная среды задана, используйте его значение.- Если файл ~/Library/Settings/Xamarin/Settings.plist существует, используйте значение, определенное внутри него.
- Используйте значение
xcode-select -p
. - Используйте
/Applications/Xcode.app
.
Поэтому рекомендуемый подход к указанию расположения Xcode на компьютере заключается в том, чтобы задать MD_APPLE_SDK_ROOT
переменную среды в путь версии Xcode. Дополнительные сведения см. в статье "Сборка с определенной версией Xcode".
Затем вы можете безопасно удалить ~/Library/Settings/Xamarin/Settings.plist с компьютера.
Диагностика проблем в гибридных приложениях Blazor
BlazorWebView имеет встроенное ведение журнала, которое помогает диагностировать проблемы в гибридном приложении Blazor. Для включения этого ведения журнала необходимо выполнить два шага.
- Включите BlazorWebView и связанные компоненты для журналов диагностических сведений.
- Настройте средство ведения журнала для записи выходных данных журнала в том месте, где его можно просмотреть.
Дополнительные сведения см. в статье "Диагностика проблем в гибридных приложениях 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): Атрибуты и элементы.