Sdílet prostřednictvím


Xamarin

Důležité

31. března 2025 je naplánované vyřazení sady Visual Studio App Center. I když můžete Visual Studio App Center dál používat, dokud nebude plně vyřazený, existuje několik doporučených alternativ, na které můžete zvážit migraci.

Přečtěte si další informace o časových osách podpory a alternativách.

Sestavení sestavení Xamarin.iOS ze souboru řešení (.sln) místo souboru projektu (.csproj)

Když se sestavení Xamarin.iOS spustí ze souboru řešení (.sln), můžete zkontrolovat několik věcí.

Projekty androidu a UPW by měly být ve vašem kódu zakázané pro konfigurace sestavení určené pro buildy iOS. Přejděte do mapování konfigurace řešení a pro všechna mapování, která cílí na iPhone a iPhoneSimulator, zrušte zaškrtnutí všech projektů, které cílí na různé platformy. Tato konfigurace zajišťuje, že se při .sln zahájení sestavování nepokusí sestavit jiné projekty.

Moje buildy Xamarin.iOS selžou deklarace, že potřebuji zadat podpisové informace

Pokud vaše buildy Xamarin.iOS nejsou podepsané, ale proces sestavení vyžaduje podepsání, je to pravděpodobně proto, že jste vybrali Sign builds: Off konfiguraci větve App Center.

Pokud protokol sestavení obsahuje:

RequireProvisioningProfile: True. 

Znamená to, že váš projekt je nakonfigurovaný pro podepisování a používá podepisování i přes konfiguraci App Center.

Pokud ho chcete opravit, otevřete v integrovaném vývojovém prostředí (IDE) sestavení sady prostředků sestavení projektu project Options > Build > a ujistěte se, že konfigurace projektu (například Debug|iPhoneSimulator) neobsahuje žádné jiné informace o podepisování než Automatické.

Sestavení Xamarin.Android selhalo s chybou : Nebyly nalezeny žádné soubory APK.

Jedním z běžných důvodů selhání sestavení během úlohy Postprocess Xamarin Android je nesprávná hodnota vlastnosti <OutputPath> v souboru projektu Android. Pokud to chcete zkontrolovat, přejděte do výstupu sestavení > možností > projektu Xamarin.Android > a ověřte, že konfigurace sestavení (Ladění/verze) odkazuje na výchozí umístění. Obvykle by to mělo být YourProjectDir/bin/$(Configuration).

Nastavil(a) jsem si větev aplikace Xamarin.iOS tak, aby se sestavila bez podepisování, ale moje sestavení selhalo s deklaracem, že potřebuji zadat podpisové informace

Pokud jste vybrali Sign builds: Off konfiguraci větve App Center a protokol sestavení obsahuje RequireProvisioningProfile: True, znamená to, že váš projekt je nakonfigurovaný pro podepisování a pokusí se použít podepisování i přes konfiguraci App Center. Pokud chcete tento problém vyřešit, otevřete project Options > Build > iOS Bundle Signing in your IDE a ujistěte se, že konfigurace projektu (například Debug|iPhoneSimulator) neobsahuje žádné jiné informace o podepisování než Automatické.

Zakázání podepisování konfigurace ladění v aplikaci Xamarin.iOS

Sestavení simulátoru Xamarin.iOS se nepodaří nainstalovat do simulátoru iOS s chybou "Nepodařilo se chmod ... /Appname.iOS.app/Appname.iOS: Žádný takový soubor nebo adresář".

Při vytváření projektu Xamarin.iOS v sadě Visual Studio má výchozí konfigurace pro iPhoneSimulator i386 + x86_64 podporované architektury. Soubor .app , který se sestavuje z této konfigurace, se nepodaří nahrát do simulátoru. Otevřete Project Options > Build iOS Build > and for iPhoneSimulator configuration change Supported architectures to i386 or x86_64.

Nastavení x86_64 v podporovaných architekturách pro konfiguraci iPhoneSimulator v aplikaci Xamarin.iOS

Sestavení Xamarin selže s chybou MSB4018: Úloha WriteRestoreGraphTask se neočekávaně nezdařila.

Vypadá to, že vaše řešení obsahuje projekty PCL nebo starší .NET Standard společně s novějšími projekty .NET Standard. To znamená, že můžou v souborech obsahovat jak PackageTargetFallback AssetTargetFallback odkazy, tak odkazy .csproj . Protokoly sestavení budou obsahovat také zprávy podobné tomuto:

error MSB4018: NuGet.Commands.RestoreCommandException: PackageTargetFallback and AssetTargetFallback cannot be used together. Remove PackageTargetFallback(deprecated) references from the project environment.

Pokud chcete tento problém vyřešit, buď odeberte PackageTargetFallback (obvykle jsou ve starších souborech PCL .csproj ), nebo ho přejmenujte na AssetTargetFallback? Řešení je také popsáno v tomto vlákně StackOverflow.

Sestavení Xamarin selže s chybou: Tento projekt odkazuje na balíčky NuGet, které v tomto počítači chybí.

Zdá se, že se při sestavování aplikace neobnovily všechny balíčky. Protokoly sestavení budou obsahovat také zprávy podobné těmto zprávám:

warning MSB3245: Could not resolve this reference. Could not locate the assembly "ASSEMBLY_NAME". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
error CS0246: The type or namespace name 'TYPE_OR_NAMESPACE_NAME' could not be found (are you missing a using directive or an assembly reference?)

Pokud chcete tento problém vyřešit, můžete použít předpřipravený skript appcenter-pre-build.sh s následujícími příkazy, které obnoví všechny balíčky pro každé řešení v úložišti:

#!/bin/bash
find $APPCENTER_SOURCE_DIRECTORY -name '*.sln' -print0 | xargs -0 -n1 nuget restore -DisableParallelProcessing

Chci spustit testy jednotek pro aplikaci Xamarin

Ke spouštění testů jednotek v sestaveních Xamarin použijte skript po sestavení. Pokud má například projekt založený na NUnit v názvu test , můžete k sestavení, spuštění a zobrazení výsledků použít následující skript:

echo "Found NUnit test projects:"
find $APPCENTER_SOURCE_DIRECTORY -regex '.*Test.*\.csproj' -exec echo {} \;
echo
echo "Building NUnit test projects:"
find $APPCENTER_SOURCE_DIRECTORY -regex '.*Test.*\.csproj' -exec msbuild {} \;
echo
echo "Compiled projects to run NUnit tests:"
find $APPCENTER_SOURCE_DIRECTORY -regex '.*bin.*Test.*\.dll' -exec echo {} \;
echo
echo "Running NUnit tests:"
find $APPCENTER_SOURCE_DIRECTORY -regex '.*bin.*Test.*\.dll' -exec nunit3-console {} \;
echo
echo "NUnit tests result:"
find . -name 'TestResult.xml' -exec cat {} \;

Zobrazuje se chyba: Pro sestavení Xamarin se nenašly žádné projekty a nenašly se žádné konfigurace.

Může se jednat o problém hloubky úložiště, ve které .csproj se nachází..sln V aktuálním analyzátoru platí omezení z důvodu výkonu.

U .csproj souborů by nemělo být nižší než čtyři adresáře včetně kořenového adresáře úložiště.

U .sln souborů by nemělo být nižší než dva adresáře, včetně kořenového adresáře úložiště.

Návody obnovení privátního informačního kanálu NuGet?

Pokud je soubor NuGet.Config vrácený se změnami do úložiště a sedí vedle .sln nebo na kořenové úrovni úložiště, App Center obnoví vaše privátní informační kanály NuGet, jak je znázorněno v následujícím příkladu. Přihlašovací údaje je možné bezpečně přidat pomocí proměnných prostředí.

Pro počítače mac buildu:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget" value="https://api.nuget.org/v3/index.json" />
    <add key="MyGet" value="https://www.myget.org/F/MyUsername/api/v2/index.json" />
    <add key="MyAuthNuget" value="https://nuget.example.com/v2/index.json" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
  <packageSourceCredentials>
    <MyAuthNuget>
      <add key="Username" value="%USER_VARIABLE%" />
      <add key="ClearTextPassword" value="%PASSWORD_VARIABLE%" />
    </MyAuthNuget>
  </packageSourceCredentials>
</configuration>

Informace o počítačích se sestavením Windows najdete v jazyce C# pro UPW.

Pokud máte složité konfigurace a potřebujete další informace, můžete se podívat na konfiguraci chování NuGet.

Sestavení se zablokovala na compileToNative

Pokud má sestavení podobné příznaky, jak je popsáno v tomto problému na GitHubu, zkuste sestavit pouze pro ARM64 přidáním následujícího argumentu, jak je navrhováno v problému:

<MtouchArch>ARM64</MtouchArch>

Sestavení selhalo s chybou: cíl "_IsProjectRestoreSupported" v projektu neexistuje.

Pokud máte v řešení projekt UPW, ve kterém během obnovení došlo k bezobslužné ignorování ve staré verzi NuGetu, může dojít k problémům se sestavením. Tento problém může vyřešit odebrání nebo oprava takového projektu UPW v řešení. Plese se podívejte na podrobnosti v tomto problému na GitHubu.