Xamarin
重要
Visual Studio App Center 定於 2025 年 3 月 31 日淘汰。 雖然您可以繼續使用 Visual Studio App Center,直到它完全淘汰為止,但有數個建議您考慮移轉至的建議替代方案。
我的 Xamarin.iOS 會從方案檔建置組建 (.sln), 而不是項目檔 (.csproj)
當您的 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 工作期間建置失敗的一個常見原因是 Android 專案檔中的 屬性值<OutputPath>
不正確。 若要檢查它,請移至 [Xamarin.Android > 項目選項 > 建置 > 輸出 ],並確認您的組建組態 (Debug/Release) 指向預設位置。 通常應該是 YourProjectDir/bin/$(Configuration)
。
我已設定 Xamarin.iOS 應用程式分支來建置而不簽署,但我的組建宣告失敗,我需要提供簽署資訊
如果您在 App Center 分支組態中選取 Sign builds: Off
,且您的組建記錄包含 RequireProvisioningProfile: True
,表示您的專案本身已設定為簽署,而且會嘗試套用簽署,儘管 App Center 設定。 若要修正此問題,請在IDE 中開啟 [建>置 iOS 套件組合簽署] 的項目選項>,並確定您的項目組態 (例如 Debug|iPhoneSimulator) 不包含任何非自動簽署資訊。
我的 Xamarin.iOS 模擬器組建無法安裝到 iOS 模擬器中,並出現「無法 chmod ... /Appname.iOS.app/Appname.iOS :沒有這類檔案或目錄」錯誤。
當您在 Visual Studio 中建立 Xamarin.iOS 專案時,iPhoneSimulator 的預設設定具有 i386 + x86_64 支持的架構。 從這類組態建置的.app檔案將無法上傳至模擬器。 開啟 [專案選項>建>置 iOS 組建] 和 [iPhoneSimulator] 組態,將支援的架構變更為 i386 或 x86_64。
我的 Xamarin 組建失敗,錯誤MSB4018:「WriteRestoreGraphTask」 工作意外失敗。
您的解決方案看起來包含 PCL 或較舊的 .NET Standard 專案,以及較新的 .NET Standard 專案。 這表示它們可能包含 PackageTargetFallback
和 AssetTargetFallback
檔案中的 .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 組建的組態
這可能是 和 .sln
所在的存放庫深度.csproj
問題。 目前分析器因效能原因而受到限制。
對於 .csproj
檔案,它不應低於包含存放庫根目錄的四個目錄。
對於 .sln
檔案,它不應該低於兩個深層目錄,包括存放庫根目錄。
如何? 還原私人 NuGet 摘要嗎?
如果 NuGet.Config 檔案已簽入存放庫,並位於.sln或存放庫根層級旁邊,App Center 會在新增 NuGet 摘要時還原您的私人 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 專案可能會解決問題。 Plese 會在此 GitHub 問題中看到詳細數據。