Compartir a través de


Xamarin

Importante

Visual Studio App Center está programado para su retirada el 31 de marzo de 2025. Aunque puede seguir usando Visual Studio App Center hasta que se retire por completo, hay varias alternativas recomendadas a las que puede considerar la posibilidad de migrar.

Obtenga más información sobre las escalas de tiempo de soporte técnico y las alternativas.

Mis compilaciones de Xamarin.iOS a partir del archivo de solución (.sln) en lugar del archivo de proyecto (.csproj)

Cuando las compilaciones de Xamarin.iOS se ejecutan desde el archivo de solución (.sln), es posible que desee comprobar varias cosas.

Los proyectos de Android y UWP deben deshabilitarse en el código para las configuraciones de compilación destinadas a las compilaciones de iOS. Vaya a las asignaciones de configuración de la solución y, para todas las asignaciones destinadas a iPhone y iPhoneSimulator, desactive todos los proyectos que tienen como destino distintas plataformas. Esta configuración garantiza que cuando comience la .sln compilación, no intentará compilar otros proyectos.

Mis compilaciones de Xamarin.iOS producen un error al reclamar que necesito proporcionar información de firma.

Si las compilaciones de Xamarin.iOS no están firmadas, pero el proceso de compilación requiere la firma, es probable que se deba a que ha seleccionado Sign builds: Off en la configuración de la rama de App Center.

Si el registro de compilación contiene:

RequireProvisioningProfile: True. 

Significa que el propio proyecto está configurado para firmar y aplica la firma a pesar de la configuración de App Center.

Para corregirlo, abra Project Options > Build > iOS Bundle Signing in your IDE (Iniciar sesión de paquete de iOS) y asegúrese de que la configuración del proyecto (por ejemplo, Debug|iPhoneSimulator) no contiene ninguna información de firma que no sea Automatic.

Error en la compilación de Xamarin.Android con error: no se encontraron archivos APK.

Una razón común para un error de compilación durante la tarea Postprocess de Xamarin Android es un valor incorrecto en la <OutputPath> propiedad en el archivo de proyecto de Android. Para comprobarlo, vaya a Xamarin.Android Project Options Build > Output (Salida de compilación de las opciones > del proyecto de Xamarin.Android>) y compruebe que la configuración de compilación (Depuración o versión) apunta a la ubicación predeterminada. Normalmente, debe ser YourProjectDir/bin/$(Configuration).

Configuré mi rama de aplicación de Xamarin.iOS para compilar sin firmar, pero mi compilación no pudo reclamar que necesito proporcionar la información de firma.

Si seleccionó Sign builds: Off en la configuración de la rama de App Center y el registro de compilación contiene RequireProvisioningProfile: True, significa que el propio proyecto está configurado para la firma e intentará aplicar la firma a pesar de la configuración de App Center. Para corregirlo, abra Project Options > Build > iOS Bundle Signing in your IDE (Iniciar sesión de paquete de iOS) y asegúrese de que la configuración del proyecto (por ejemplo, Debug|iPhoneSimulator) no contiene ninguna información de firma que no sea Automatic.

Deshabilitación de la firma para la configuración de depuración en la aplicación Xamarin.iOS

Mi compilación del simulador de Xamarin.iOS no se puede instalar en el simulador de iOS con el error "Failed to chmod ... /Appname.iOS.app/Appname.iOS: No se pudo instalar este archivo o directorio".

Al crear un proyecto de Xamarin.iOS en Visual Studio, la configuración predeterminada para iPhoneSimulator tiene arquitecturas compatibles con i386 + x86_64 . El archivo .app que se compila a partir de dicha configuración no se podrá cargar en un simulador. Abra Opciones > de proyecto Build > iOS Build and for iPhoneSimulator configuration change Supported architectures to i386 or x86_64.

Establecer x86_64 en Arquitecturas admitidas para la configuración de iPhoneSimulator en la aplicación Xamarin.iOS

Se produce un error en la compilación de Xamarin MSB4018: la tarea "WriteRestoreGraphTask" no se pudo realizar de forma inesperada.

Parece que la solución contiene proyectos PCL o .NET Standard anteriores junto con proyectos más recientes de .NET Standard. Esto significa que pueden contener referencias y AssetTargetFallback en .csproj PackageTargetFallback archivos. Los registros de compilación también contendrán mensajes como este:

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

Para resolver este problema, quite PackageTargetFallback (tiende a estar en archivos PCL .csproj más antiguos) o cámbielo por AssetTargetFallback? La solución también se describe en este subproceso stackOverflow.

Se produce un error en la compilación de Xamarin: este proyecto hace referencia a paquetes NuGet que faltan en este equipo.

Parece que no todos los paquetes se restauraron para compilar la aplicación. Los registros de compilación también contendrán mensajes como estos:

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?)

Para resolver este problema, puede usar el script appcenter-pre-build.sh anterior a la compilación con los siguientes comandos, que restaura todos los paquetes de cada solución del repositorio:

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

Quiero ejecutar pruebas unitarias para mi aplicación de Xamarin

Para ejecutar pruebas unitarias en las compilaciones de Xamarin, use un script posterior a la compilación. Por ejemplo, cuando el proyecto basado en NUnit tiene Test en el nombre, puede usar el siguiente script para compilar, ejecutar y mostrar los resultados:

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 {} \;

Obtengo un error: No se encontraron proyectos y No se encontraron configuraciones para compilaciones de Xamarin

Podría ser un problema de la profundidad del repositorio en la .csproj que se encuentran y .sln . Hay una limitación en el analizador actual debido a motivos de rendimiento.

En .csproj el caso de los archivos, no debe ser inferior a cuatro directorios profundos, incluida la raíz del repositorio.

En .sln el caso de los archivos, no debe ser inferior a dos directorios en profundidad, incluida la raíz del repositorio.

Cómo restaurar una fuente de NuGet privada?

Si el archivo NuGet.Config está protegido en el repositorio y se encuentra junto al .sln o en el nivel raíz del repositorio, App Center restaura las fuentes privadas de NuGet cuando se agregan como se muestra en el ejemplo siguiente. Las credenciales se pueden agregar de forma segura mediante variables de entorno.

Para las máquinas de compilación de 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>

Para las máquinas de compilación de Windows, consulte C# para UWP.

Si tiene configuraciones complejas y necesita más información, puede consultar Configuración del comportamiento de NuGet.

Compilaciones bloqueadas en CompileToNative

Si la compilación experimenta síntomas similares como se describe en este problema de GitHub, intente compilar solo para ARM64 agregando el siguiente argumento, como se sugiere en el problema:

<MtouchArch>ARM64</MtouchArch>

Error de compilación: el destino "_IsProjectRestoreSupported" no existe en el proyecto.

Es posible que experimente problemas de compilación si tiene un proyecto para UWP en la solución donde durante la restauración sus errores se ignoraron silenciosamente en la versión anterior de NuGet. Quitar o corregir este proyecto de UWP en la solución puede resolver el problema. Plese consulte los detalles de este problema de GitHub.