Xamarin
Importante
Visual Studio App Center è pianificato per il ritiro il 31 marzo 2025. Anche se è possibile continuare a usare Visual Studio App Center fino a quando non viene completamente ritirato, esistono diverse alternative consigliate a cui è possibile considerare la migrazione.
Altre informazioni sulle sequenze temporali e sulle alternative di supporto.
La compilazione di Xamarin.iOS viene compilata dal file della soluzione (.sln) anziché dal file di progetto (con estensione csproj)
Quando le compilazioni di Xamarin.iOS vengono eseguite dal file di soluzione (.sln), è possibile verificare diversi aspetti.
I progetti Android e UWP devono essere disabilitati nel codice per le configurazioni di compilazione destinate alle compilazioni iOS. Passare ai mapping di configurazione della soluzione e per tutti i mapping destinati a iPhone e iPhoneSimulator deselezionare tutti i progetti destinati a piattaforme diverse. Questa configurazione garantisce quando inizia la .sln
compilazione, non tenterà di compilare altri progetti.
Le compilazioni di Xamarin.iOS non riescono a richiedere di fornire informazioni di firma
Se le compilazioni di Xamarin.iOS non sono firmate, ma il processo di compilazione richiede la firma, è probabile che sia stato selezionato Sign builds: Off
nella configurazione del ramo app Center.
Se il log di compilazione contiene:
RequireProvisioningProfile: True.
Significa che il progetto stesso è configurato per la firma e applica la firma nonostante la configurazione di App Center.
Per risolverlo, aprire Project Options > Build iOS Bundle Signing in your IDE (Compilazione > bundle iOS) e assicurarsi che la configurazione del progetto (ad esempio Debug|iPhoneSimulator) non contenga informazioni di firma diverse da Automatic.
La compilazione di Xamarin.Android non è riuscita con errore: nessun file APK trovato.
Un motivo comune per cui una compilazione non riesce durante l'attività Postprocess di Xamarin Android è un valore non corretto nella <OutputPath>
proprietà nel file di progetto Android. Per verificarlo, passare a Xamarin.Android > Project Options > Build Output (Output build > ) e verificare che la configurazione della build (Debug/Release) punti al percorso predefinito. In genere, deve essere YourProjectDir/bin/$(Configuration)
.
È stato configurato il ramo dell'app Xamarin.iOS per la compilazione senza firma, ma la compilazione non è riuscita a dichiarare che è necessario fornire le informazioni di firma
Se è stata selezionata Sign builds: Off
nella configurazione del ramo app Center e il log di compilazione contiene RequireProvisioningProfile: True
, significa che il progetto stesso è configurato per la firma e tenterà di applicare la firma nonostante la configurazione di App Center. Per correggerlo, aprire Project Options > Build > iOS Bundle Signing in your IDE (Compilazione bundle iOS) e assicurarsi che la configurazione del progetto (ad esempio Debug|iPhoneSimulator) non contenga informazioni di firma diverse da Automatic.
La compilazione del simulatore Xamarin.iOS non riesce a eseguire l'installazione nel simulatore iOS con errore "Failed to chmod ... /Appname.iOS.app/Appname.iOS : No such file or directory".
Quando si crea un progetto Xamarin.iOS in Visual Studio, la configurazione predefinita per iPhoneSimulator include i386 + x86_64 architetture supportate. Il file .app che viene compilato da tale configurazione non riuscirà a caricarsi in un simulatore. Aprire Opzioni progetto Build iOS Build and for iPhoneSimulator configuration change Supported architectures to i386 or x86_64.Open Project Options > Build iOS Build > and for iPhoneSimulator configuration change Supported architectures to i386 or x86_64.
La compilazione di Xamarin non riesce e viene visualizzato l'errore MSB4018: l'attività "WriteRestoreGraphTask" non è riuscita in modo imprevisto.
Sembra che la soluzione contenga progetti .NET Standard più recenti o meno recenti insieme ai progetti .NET Standard più recenti. Ciò significa che possono contenere sia riferimenti che PackageTargetFallback
AssetTargetFallback
nei .csproj
file. I log di compilazione conterranno anche messaggi simili al seguente:
error MSB4018: NuGet.Commands.RestoreCommandException: PackageTargetFallback and AssetTargetFallback cannot be used together. Remove PackageTargetFallback(deprecated) references from the project environment.
Per risolvere questo problema, rimuovere PackageTargetFallback (tende a essere nei file PCL .csproj
meno recenti) o rinominarlo in AssetTargetFallback? La soluzione è descritta anche in questo thread StackOverflow.
La compilazione di Xamarin ha esito negativo con errore: questo progetto fa riferimento a pacchetti NuGet mancanti nel computer.
Sembra che non tutti i pacchetti siano stati ripristinati per compilare l'applicazione. I log di compilazione conterranno anche messaggi simili ai seguenti:
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?)
Per risolvere questo problema, è possibile usare lo script appcenter-pre-build.sh
di pre-compilazione con i comandi seguenti, che ripristina tutti i pacchetti per ogni soluzione nel repository:
#!/bin/bash
find $APPCENTER_SOURCE_DIRECTORY -name '*.sln' -print0 | xargs -0 -n1 nuget restore -DisableParallelProcessing
Si vogliono eseguire unit test per l'applicazione Xamarin
Per eseguire unit test nelle compilazioni di Xamarin, usare uno script di post-compilazione. Ad esempio, quando il progetto basato su NUnit ha Test nel nome, è possibile usare lo script seguente per compilare, eseguire e visualizzare i risultati:
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 {} \;
Viene visualizzato un errore: nessun progetto trovato e Nessuna configurazione trovata per le compilazioni di Xamarin
Potrebbe trattarsi di un problema della profondità del repository in cui .csproj
si trovano e .sln
. Esiste una limitazione nell'analizzatore corrente a causa di motivi di prestazioni.
Per .csproj
i file, non deve essere inferiore a quattro directory, inclusa la radice del repository.
Per .sln
i file, non deve essere inferiore a due directory, inclusa la radice del repository.
Ricerca per categorie ripristinare un feed NuGet privato?
Se il file NuGet.Config viene archiviato nel repository e seduto accanto al .sln o al livello radice del repository, App Center ripristina i feed NuGet privati quando vengono aggiunti, come illustrato nell'esempio seguente. Le credenziali possono essere aggiunte in modo sicuro usando le variabili di ambiente.
Per i computer di compilazione Mac:
<?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>
Per i computer di compilazione Windows, vedere UWP C#.
Se sono presenti configurazioni complesse e sono necessarie altre informazioni, vedere Configurazione del comportamento di NuGet.
Compilazioni bloccate in CompileToNative
Se la compilazione presenta sintomi simili come descritto in questo problema di GitHub, provare a compilare solo per ARM64 aggiungendo l'argomento seguente, come suggerito nel problema:
<MtouchArch>ARM64</MtouchArch>
Compilazione non riuscita con errore: la destinazione "_IsProjectRestoreSupported" non esiste nel progetto.
Potresti riscontrare problemi di compilazione se hai un progetto UWP nella soluzione in cui durante il ripristino i relativi errori sono stati ignorati automaticamente nella versione precedente di NuGet. La rimozione o la correzione di questo progetto UWP nella soluzione potrebbe risolvere il problema. Vedere i dettagli in questo problema di GitHub.