Xamarin
重要
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 バンドル署名] > を開き、プロジェクト構成 (Debug|iPhoneSimulator など) に [自動] 以外の署名情報が含まれていないことを確認します。
Xamarin.Android のビルドが失敗し、 エラー: APK ファイルが見つかりませんでした。
Xamarin Android Postprocess タスク中にビルドが失敗する一般的な理由の 1 つは、Android プロジェクト ファイルの プロパティの<OutputPath>
値が正しくないことです。 チェックするには、Xamarin.Android > プロジェクト オプション>のビルド>出力に移動し、ビルド構成 (デバッグ/リリース) が既定の場所を指していることを確認します。 通常は である YourProjectDir/bin/$(Configuration)
必要があります。
署名なしでビルドするように Xamarin.iOS アプリ ブランチを設定しましたが、署名情報を提供する必要があるという要求でビルドが失敗しました
App Center ブランチの構成で を選択 Sign builds: Off
し、ビルド ログに が含まれている RequireProvisioningProfile: True
場合は、プロジェクト自体が署名用に構成されており、App Center の構成にもかかわらず署名を適用しようとします。 これを修正するには 、IDE で [プロジェクト オプション] > [ビルド > iOS バンドル署名 ] を開き、プロジェクト構成 ( Debug|iPhoneSimulator など) に [自動] 以外の署名情報が含まれていないことを確認します。
を
Xamarin.iOS シミュレーターのビルドが、"chmod ... /Appname.iOS.app/Appname.iOS に失敗しました: そのようなファイルまたはディレクトリがありません" エラーで iOS シミュレーターにインストールできません。
Visual Studio で Xamarin.iOS プロジェクトを作成する場合、iPhoneSimulator の既定の構成には 、i386 + x86_64 サポートされているアーキテクチャがあります。 このような構成からビルドされた .app ファイルは、シミュレーターにアップロードできません。 [プロジェクト オプション] > [Build iOS Build]\(iOS ビルドのビルド>\) を開き、iPhoneSimulator の構成の [サポートされているアーキテクチャ] を [i386] または [x86_64] に変更します。
する
Xamarin ビルドがエラー MSB4018で失敗しました:"WriteRestoreGraphTask" タスクが予期せず失敗しました。
ソリューションには、新しい .NET Standard プロジェクトと共に PCL または古い .NET Standard プロジェクトが含まれているように見えます。 つまり、ファイルに と の両方PackageTargetFallback
の.csproj
参照がAssetTargetFallback
含まれている可能性があります。 ビルド ログには、次のようなメッセージも含まれます。
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
、リポジトリ ルートを含む深い 2 つのディレクトリより小さくしないでください。
プライベート 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" がプロジェクトに存在しません。
ソリューションに UWP プロジェクトがある場合、ビルドの問題が発生する可能性があります。復元中、そのエラーは古いバージョンの NuGet でサイレントに無視されていました。 ソリューションでこのような UWP プロジェクトを削除または修正すると、問題が解決される可能性があります。 この GitHub の問題の詳細を確認してください。