다음을 통해 공유


Xamarin

Important

Visual Studio App Center는 2025년 3월 31일에 사용 중지될 예정입니다. 완전히 사용 중지될 때까지 Visual Studio App Center를 계속 사용할 수 있지만 마이그레이션을 고려할 수 있는 몇 가지 권장 대안이 있습니다.

지원 타임라인 및 대안에 대해 자세히 알아봅니다.

내 Xamarin.iOS는 프로젝트 파일(.csproj) 대신 솔루션 파일(.sln)에서 빌드를 빌드합니다.

Xamarin.iOS 빌드가 솔루션 파일(.sln)에서 실행되는 경우 몇 가지 사항을 확인할 수 있습니다.

iOS 빌드용 빌드 구성의 경우 코드에서 Android 및 UWP 프로젝트를 사용하지 않도록 설정해야 합니다. 솔루션의 구성 매핑 및 iPhone 및 iPhoneSimulator를 대상으로 하는 모든 매핑에 대해 다른 플랫폼을 대상으로 하는 모든 프로젝트를 선택 취소합니다. 이 구성은 빌드를 .sln 시작할 때 다른 프로젝트를 빌드하려고 시도하지 않도록 합니다.

서명 정보를 제공해야 한다고 주장하는 Xamarin.iOS 빌드 실패

Xamarin.iOS 빌드가 서명되지 않았지만 빌드 프로세스에 서명이 필요한 경우 App Center 분기 구성에서 선택 Sign builds: Off 했기 때문일 수 있습니다.

빌드 로그에 다음이 포함된 경우:

RequireProvisioningProfile: True. 

즉, 프로젝트 자체는 서명을 위해 구성되고 App Center 구성에도 불구하고 서명을 적용합니다.

이 문제를 해결하려면 IDE에서 프로젝트 옵션 > 빌드 > iOS 번들 서명을 열고 프로젝트 구성(예: 디버그|iPhoneSimulator)에 자동 이외의 서명 정보가 포함되어 있지 않은지 확인합니다.

오류: APK 파일을 찾을 수 없어 Xamarin.Android 빌드에 실패했습니다.

Xamarin Android Postprocess 작업 중에 빌드가 실패하는 일반적인 이유 중 하나는 Android 프로젝트 파일의 <OutputPath> 속성에 잘못된 값이 있기 때문입니다. 확인하려면 Xamarin.Android > 프로젝트 옵션 > 빌드 > 출력으로 이동하여 빌드 구성(디버그/릴리스)이 기본 위치를 가리키는지 확인합니다. 일반적으로는 다음과 여야 YourProjectDir/bin/$(Configuration)합니다.

서명하지 않고 빌드하도록 Xamarin.iOS 앱 분기를 설정했지만 서명 정보를 제공해야 한다고 주장하는 빌드에 실패했습니다.

App Center 분기 구성에서 선택하고 Sign builds: Off 빌드 로그에 포함된 RequireProvisioningProfile: True경우 프로젝트 자체가 서명을 위해 구성되고 App Center 구성에도 불구하고 서명을 적용하려고 한다는 의미입니다. 이 문제를 해결하려면 IDE에서 프로젝트 옵션 > 빌드 iOS 번들 서명을 열고 프로젝트 구성(예: 디버그|iPhoneSimulator)에 자동 이외의 서명 정보가 포함되어 있지 않은지 확인 > 합니다.

Xamarin.iOS 애플리케이션에서 디버그 구성에 대한 서명 사용 안 함

내 Xamarin.iOS 시뮬레이터 빌드가 iOS 시뮬레이터에 설치되지 않고 "chmod 실패 ... /Appname.iOS.app/Appname.iOS : 이러한 파일 또는 디렉터리가 없습니다" 오류가 발생했습니다.

Visual Studio에서 Xamarin.iOS 프로젝트를 만들 때 iPhoneSimulator의 기본 구성에는 i386 + x86_64 지원되는 아키텍처가 있습니다. 이러한 구성에서 빌드되는 .app 파일은 시뮬레이터에 업로드되지 않습니다. 프로젝트 옵션 > 빌드 iOS 빌드 > 를 열고 iPhoneSimulator 구성에 대해 지원되는 아키텍처를 i386 또는 x86_64 변경합니다.

Xamarin.iOS 애플리케이션의 iPhoneSimulator 구성에 대해 지원되는 아키텍처에서 x86_64 설정

"WriteRestoreGraphTask" 작업이 예기치 않게 실패했음을 MSB4018 오류와 함께 Xamarin 빌드가 실패합니다.

솔루션에 최신 .NET Standard 프로젝트와 함께 PCL 또는 이전 .NET Standard 프로젝트가 포함된 것처럼 보입니다. 즉, 파일에 참조와 AssetTargetFallback 참조를 모두 PackageTargetFallback 포함할 .csproj 수 있습니다. 빌드 로그에는 다음과 같은 메시지도 포함됩니다.

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

이 문제를 해결하려면 PackageTargetFallback(이전 PCL .csproj 파일에 있는 경향이 있는 경우)을 제거하거나 AssetTargetFallback으로 이름을 바꾸시겠습니까? 솔루션은 이 StackOverflow 스레드에서도 설명됩니다.

오류로 Xamarin 빌드가 실패합니다. 이 프로젝트는 이 컴퓨터에서 누락된 NuGet 패키지를 참조합니다.

애플리케이션을 빌드하기 위해 모든 패키지가 복원된 것은 아닙니다. 빌드 로그에는 다음과 같은 메시지도 포함됩니다.

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

이 문제를 해결하려면 다음 명령과 함께 빌드 전 스크립트 appcenter-pre-build.sh 를 사용하여 리포지토리의 각 솔루션에 대한 모든 패키지를 복원할 수 있습니다.

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

Xamarin 애플리케이션에 대한 단위 테스트를 실행하려고 합니다.

Xamarin 빌드에서 단위 테스트를 실행하려면 빌드 후 스크립트사용합니다. 예를 들어 NUnit 기반 프로젝트에 이름이 Test 가 있는 경우 다음 스크립트를 사용하여 결과를 빌드, 실행 및 표시할 수 있습니다.

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

오류가 발생합니다. 프로젝트를 찾을 수 없고 Xamarin 빌드에 대한 구성을 찾을 수 없습니다.

리포지토리 깊이 .csproj 에 문제가 있을 수 있습니다 .sln . 성능상의 이유로 현재 분석기에는 제한이 있습니다.

파일의 경우 .csproj 리포지토리 루트를 포함하여 4개의 디렉터리보다 낮아서는 안 됩니다.

파일의 경우 .sln 리포지토리 루트를 포함하여 두 개의 디렉터리보다 낮아서는 안 됩니다.

프라이빗 NuGet 피드를 복원할 어떻게 할까요? 있나요?

NuGet.Config 파일이 리포지토리에 체크 인되어 .sln 옆에 있거나 리포지토리의 루트 수준에 있는 경우 App Center는 아래 예제와 같이 추가되면 프라이빗 NuGet 피드를 복원합니다. 환경 변수를 사용하여 자격 증명을 안전하게 추가할 수 있습니다.

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>

Windows 빌드 컴퓨터의 경우 UWP C#참조하세요.

복잡한 구성이 있고 자세한 정보가 필요한 경우 NuGet 동작 구성을 참조할 수 있습니다.

CompileToNative에서 중단된 빌드

이 GitHub 문제에 설명된 대로 빌드에서 유사한 증상이 발생하는 경우 문제에 제안된 대로 다음 인수를 추가하여 ARM64용으로만 빌드합니다.

<MtouchArch>ARM64</MtouchArch>

빌드에 실패했습니다. 대상 "_IsProjectRestoreSupported"이 프로젝트에 없습니다.

복원 중에 이전 버전의 NuGet에서 오류가 자동으로 무시된 솔루션에 UWP 프로젝트가 있는 경우 빌드 문제가 발생할 수 있습니다. 솔루션에서 이러한 UWP 프로젝트를 제거하거나 수정하면 문제가 해결될 수 있습니다. Plese는 이 GitHub 문제의 세부 정보를 확인합니다.