Felsöka kända problem

Den här artikeln beskriver några av de kända problemen med .NET Multi-platform App UI (.NET MAUI) och hur du kan lösa eller kringgå dem. .NET MAUI-lagringsplatsen beskriver också några kända problem.

Det går inte att hitta .NET MAUI-arbetsbelastningarna

Det finns två alternativ för att installera .NET MAUI-arbetsbelastningarna:

  1. Visual Studio i Windows kan installera .msi filer för varje arbetsbelastningspaket.
  2. dotnet workload install Kommandon.

Om du kör en dotnet workload install i Windows när du har installerat .NET MAUI via Installationsprogrammet för Visual Studio kan Visual Studio ange ett tillstånd där det inte går att hitta .NET MAUI-arbetsbelastningarna. Du får byggfel som talar om för dig att installera .NET MAUI-arbetsbelastningarna och det är möjligt att ange ett tillstånd där arbetsbelastningarna inte kan repareras eller installeras om. Mer information finns i GitHub-problemet dotnet/sdk#22388.

Windows

Lösningen på det här problemet i Windows är att avinstallera .NET MAUI-arbetsbelastningarna via CLI, avinstallera eventuella .NET SDK:er i Kontrollpanelen och avinstallera .NET MAUI-arbetsbelastningarna i Visual Studio. Dessa avinstallationer kan utföras med följande process:

  1. Kör dotnet workload uninstall maui om du någonsin har använt kommandona dotnet workload install .
  2. Avinstallera alla fristående .NET SDK-installationsprogram från Kontrollpanelen. Dessa installationsprogram har namn som liknar Microsoft .NET SDK 6.0.300.
  3. I varje instans av Visual Studio avinstallerar du arbetsbelastningarna för .NET Multi-platform App UI-utveckling och .NET desktop-utveckling.

Kontrollera sedan om det finns ytterligare .msi filer som måste avinstalleras genom att köra följande kommando:

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

Det här reg query kommandot listar .NET 6+ SDK:er som fortfarande är installerade på datorn, till exempel:

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

Om du får liknande utdata bör du kopiera GUID för varje paket och avinstallera paketet med msiexec kommandot :

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

Sedan bör du fortsätta att reg query köra kommandot tills det inte returnerar några resultat. När det inte finns några fler resultat och alla .NET 6+ SDK:er har avinstallerats bör du också överväga att ta bort följande mappar:

  • 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.* eller C:\Program Files\dotnet\sdk\7.*
  • C:\Program Files\dotnet\host\fxr\6.* eller C:\Program Files\dotnet\host\fxr\7.*

När du har följt den här processen bör du kunna installera om .NET MAUI antingen via Visual Studio eller genom att installera den valda .NET SDK-versionen och köra dotnet workload install maui kommandot.

Plattformsversionen finns inte

Visual Studio kanske inte löser de arbetsbelastningar som krävs om du försöker kompilera ett projekt och får ett fel som liknar följande text:

Plattformsversionen finns inte för ett eller flera målramverk, även om de har angett en plattform: net8.0-android, net8.0-ios, net8.0-maccatalyst

Det här problemet beror vanligtvis på att en X86- och x64 SDK är installerad och att x86-versionen används. Visual Studio och .NET MAUI kräver x64 .NET SDK. Om operativsystemet har en systemomfattande PATH variabel som löser x86 SDK först måste du åtgärda det genom att antingen ta bort x86 .NET SDK från variabeln PATH eller främja x64 .NET SDK så att det löser sig först. Mer information om hur du felsöker X86 vs x64 SDK-upplösning finns i Installera .NET i Windows – Felsökning.

Typ eller namnområde "Standard" finns inte

När du använder API:et Contactskan du se följande fel som rör iOS och macOS:

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

Plattformarna iOS och macOS innehåller ett rotnamnområde med namnet Contacts. Den här konflikten påverkar plattformar med Microsoft.Maui.ApplicationModel.Communication namnområdet, som innehåller en Contacts typ. Namnområdet Microsoft.Maui.ApplicationModel.Communication importeras automatiskt av <ImplicitUsings> inställningen i projektfilen.

Om du vill skriva kod som också kompileras för iOS och macOS kvalificerar du helt typen Contacts . Alternativt kan du ange ett using direktiv överst i kodfilen för att mappa Communication namnområdet:

using Communication = Microsoft.Maui.ApplicationModel.Communication;

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

Xcode är för närvarande inte installerat eller gick inte att hitta

När du har installerat Xcode-kommandoradsverktygen med xcode-select --installkan Visual Studio Code visa meddelandet "Xcode är inte installerat för närvarande eller kunde inte hittas" när du försöker skapa .NET MAUI-appar som är avsedda för iOS eller Mac Catalyst. I det här scenariot kontrollerar du att Xcode också är installerat från App Store. Starta sedan Xcode och gå till Xcode-inställningar >> Platser > kommandoradsverktyg och kontrollera om listrutan är tom. Om den är tom väljer du listrutan och väljer sedan platsen för Xcode-kommandoradsverktygen. Stäng sedan Xcode och starta om Visual Studio Code.

Det gick inte att hitta ett giltigt Xcode-apppaket

Om du får felet "Det gick inte att hitta ett giltigt Xcode-apppaket på '/Library/Developer/CommandLineTools'" när du försöker skapa .NET MAUI-appar som är avsedda för iOS eller Mac Catalyst kan du prova att lösningen som beskrivs i Xcode inte är installerad eller inte kunde hittas. Kör följande kommando om du fortfarande inte kan komma åt Xcode > Preferenser > Platser > Kommandoradsverktyg-rullgardinsmenyn:

sudo xcode-select --reset

Xcode-versionen kan inte hittas

I vissa fall kan det hända att ett försök görs för att skapa en .NET MAUI-app på iOS eller Mac Catalyst försöker använda en version av Xcode som inte längre är installerad på din dator. När detta inträffar får du ett felmeddelande som liknar:

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

När du skapar en app använder .NET för iOS och .NET för Mac Catalyst följande process för att avgöra vilken version av Xcode som ska användas:

  1. MD_APPLE_SDK_ROOT Om miljövariabeln har angetts använder du dess värde. Den här miljövariabeln kommer att bli inaktuell i en framtida version. använd den inte.
  2. Om filen ~/Library/Preferences/Xamarin/Settings.plist eller ~/Library/Preferences/maui/Settings.plist finns använder du värdet som definierats i filen. Dessa filer kommer att bli inaktuella i en framtida version. använd dem inte.
  3. Använd värdet xcode-select -p.
  4. Använd /Applications/Xcode.app.

Den rekommenderade metoden för att ange platsen för Xcode på datorn är att:

  1. Ta bort ~/Bibliotek/Inställningar/Xamarin/Settings.plist - eller ~/Library/Preferences/maui/Settings.plist-filer (om de finns).
  2. Använd xcode-select --switch ... antingen för att välja systemets version av Xcode eller ange DEVELOPER_DIR miljövariabeln till sökvägen till Xcode. Mer information finns i Skapa med en specifik version av Xcode.

Diagnostisera problem i Blazor Hybrid-appar

BlazorWebView har inbyggd loggning som kan hjälpa dig att diagnostisera problem i din Blazor Hybrid-app. Det finns två steg för att aktivera den här loggningen:

  1. Aktivera BlazorWebView och relaterade komponenter för att logga diagnostikinformation.
  2. Konfigurera en loggare för att skriva loggutdata till den där du kan visa den.

Mer information finns i Diagnostisera problem i Blazor Hybrid-appar.

Inaktivera bildpaketering

I felsökningssyfte kan paketering av resurser för avbildningar inaktiveras genom att ställa in build-egenskapen $(EnableMauiImageProcessing) till false i den första <PropertyGroup>-noden i projektfilen.

<EnableMauiImageProcessing>false</EnableMauiImageProcessing>

Inaktivera paketering av välkomstskärmen

I felsökningssyfte kan generering av startskärmsresurser inaktiveras genom att ange byggnadsegenskapen $(EnableSplashScreenProcessing) till false i den första <PropertyGroup>-noden i din projektfil:

<EnableSplashScreenProcessing>false</EnableSplashScreenProcessing>

Inaktivera teckensnittspaketering

I felsökningssyfte kan du inaktivera paketering av teckensnittsresurser genom att ange versionsegenskapen $(EnableMauiFontProcessing) till false i den första <PropertyGroup> noden i projektfilen:

<EnableMauiFontProcessing>false</EnableMauiFontProcessing>

Inaktivera paketering av tillgångsfil

I felsökningssyfte kan resurspaketering av tillgångsfiler inaktiveras genom att du anger versionsegenskapen $(EnableMauiAssetProcessing) till false i den första <PropertyGroup> noden i projektfilen:

<EnableMauiAssetProcessing>false</EnableMauiAssetProcessing>

Generera en tom välkomstskärm

I felsökningssyfte kan en tom välkomstskärm genereras om du inte har ett <MauiSplashScreen> objekt och du inte har en anpassad välkomstskärm. Detta kan uppnås genom att ställa in byggegenskapen $(EnableBlankMauiSplashScreen)true i den första <PropertyGroup> noden i projektfilen:

<EnableBlankMauiSplashScreen>true</EnableBlankMauiSplashScreen>

Att generera en tom startskärm kommer att åsidosätta alla anpassade startskärmar och orsaka att appen avvisas av appbutiken. Det kan dock vara en användbar metod vid testning för att säkerställa att appens användargränssnitt är korrekt.

Fel på dubbla filnamn för bilder

Du kan stöta på byggfel angående duplicerade bildfilnamn.

Ett eller flera duplicerade filnamn har identifierats. Alla filnamn för bildutdata måste vara unika.

Detta inträffar för MauiIcon och MauiImage objekt eftersom .NET MAUI från .NET 8 kontrollerar att det inte finns några duplicerade filnamn för avbildningsresurser.

Felet uppstår när du har identiska filnamn i flera mappar och under vissa omständigheter när du har identiska filnamn med olika tillägg i olika mappar. Build-felet uppstår till exempel för en PNG-fil på Resources/Images/PNG/dotnet_bot.png och en SVG-fil på Resources/Images/SVG/dotnet_bot.svg eftersom SVG-filer konverteras till PNG-filer vid byggtiden.

Felet uppstår också om du använder Include attributet för ett MauiImage objekt för att inkludera alla bilder i en mapp och sedan även inkluderar en specifik bildfil:

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

Om du får det här byggfelet kan du åtgärda det genom att se till att projektfilen inte innehåller duplicerade avbildningar. Det gör du genom att ändra referenserna i MauiIcon eller MauiImage som refererar till en specifik fil att använda Update attributet istället för Include attributet.

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

Information om elementattribut för MSBuild-objekt finns i Elementelement (MSBuild): Attribut och element.