web-dev-qa-db-ja.com

「LinkAssemblies」タスクが予期せず失敗しました

リリースモードでxamarinフォームプロジェクトをビルドしようとすると、エラーが発生します。

C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(5,5): Error MSB4018: The "LinkAssemblies" task failed unexpectedly.
Xamarin.Android.XamarinAndroidException: error XA2006: Reference to metadata item 'System.Void Android.Widget.AbsListView::SetSelectionFromTop(System.Int32,System.Int32)' (defined in 'Xamarin.Forms.Platform.Android, Version=1.3.3.0, Culture=neutral, PublicKeyToken=null') from 'Xamarin.Forms.Platform.Android, Version=1.3.3.0, Culture=neutral, PublicKeyToken=null' could not be resolved. ---> Mono.Cecil.ResolutionException: Failed to resolve System.Void Android.Widget.AbsListView::SetSelectionFromTop(System.Int32,System.Int32)
   at Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference reference)
   at Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction instruction)
   at Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)
   at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
   at Mono.Linker.Steps.MarkStep.ProcessQueue()
   at Mono.Linker.Steps.MarkStep.Process()
   at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
   at Mono.Linker.Pipeline.Process(LinkContext context)
   at MonoDroid.Tuner.Linker.Process(LinkerOptions options, LinkContext& context)
   at Xamarin.Android.Tasks.LinkAssemblies.Execute()
   --- End of inner exception stack trace ---
   at Xamarin.Android.Diagnostic.Error(Int32 code, Exception innerException, String message, Object[] args)
   at Xamarin.Android.Tasks.LinkAssemblies.Execute()
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext() (MSB4018) (XXX.Android)

どうすればこれを解決できますか?クリーニングとビルドを再度試みました。 xamarinスタジオを閉じて再起動することもできます。何も機能していないようです。

Xamarin formsおよびxamarin forms labsの最新リリースです。最小のAndroid使用しているAPIレベルは17です。最小のSDKバージョン20も試しました。

いくつかの詳細:

Xamarin Studio
Version 5.7 (build 661)
Installation UUID: f97e711d-1fe0-450f-a3bb-2d9b972ab295
Runtime:
    Microsoft .NET 4.0.30319.0
    GTK+ 2.24.22 (MS-Windows theme)
    GTK# 2.12.26

Xamarin.Android
Version: 4.20.0 (Indie Edition)
Android SDK: C:\Users\Kartik\AppData\Local\Android\android-sdk
    Supported Android versions:
        2.1    (API level 7)
        2.2    (API level 8)
        2.3    (API level 10)
        3.1    (API level 12)
        4.0    (API level 14)
        4.0.3  (API level 15)
        4.1    (API level 16)
        4.3    (API level 18)
        4.4    (API level 19)
        4.4.87 (API level 20)
        5.0    (API level 21)
Java SDK: C:\Program Files (x86)\Java\jdk1.6.0_39
Java version "1.6.0_39"
Java(TM) SE Runtime Environment (build 1.6.0_39-b04)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode, sharing)

Build Information
Release ID: 507000661
Git revision: b70bab61da996da29045ea8ee8aed1a6faedbe78
Build date: 2015-01-05 11:27:37-05
Xamarin addins: 82f6c71490562d6cd125a09287f441902fdac3d7

Operating System
Windows 6.2.9200.0 (64-bit)
35
Kartik

どうやら、 これは既知の問題です :Xamarin FormsはTargetAndroidVersionが21である必要があります。(設定GUIでは、これは「Androidバージョンを使用してコンパイル:」というタイトルです)

23
Andy Hopper

私の場合、Xamarin.ios.dllをポータブルプロジェクト参照に追加するために問題が発生しました。その参照を削除しましたが、現在は機能しています

5
Onur

私の場合、問題はpclプロジェクトでdll Xamarin.iOSを参照していました。このアセンブリではリンクは機能しません。参照を削除すると、問題が修正されました。

3
koshiMan88

私も同じ問題を経験しました。一連の試行錯誤の後、解決策を見つけました。

マニフェストでTarget Android Version to Android 7.1(API Level 25 Nougat)以上に設定します。SetCompile Android Version to Android 7.1も同様です。

これが役立つことを願っています

1
Uchenna Nnodim

リリース構成の[リンカープロパティ]> [SdkアセンブリのみからSdkおよびユーザーアセンブリへのリンク]を変更しました。

options

1
James Esh

Jusリンクを「NONE」から「sdk and users Assembly」に変更し、ソリューションを実行したところ、問題は解決しました。その後、「sdk and users Assembly」を「NONE」に変更して、問題なくプロジェクトを実行できます。

ただし、リリースファイルのサイズは変更される可能性があります。

ここに画像の説明を入力

0

NuGetパッケージマネージャーでXamarin.Android.Support.v4を21.0.0バージョンにダウングレードすることを修正しました。あなたを助けることを願っています

0
Pedro Câmara

「LinkAssembliesTask failed」エラーの根本的な原因は異なります。

NuGetパッケージをアップグレードして、参照を台無しにしました。

=====

私には2つのプロジェクトがあったとしましょう:

  1. NetStandardProject

    • Assembly1への参照があります。

    • Assembly1にはCoolGuyのクラスがあり、CoolGuy.Flex()メソッドがあります。

  2. NetProjectを参照するAndroidProject。

    • Assembly2への参照があります。

    • Assembly2にはCoolGuyのクラスがありますが、CoolGuy.Flex()メソッドはありません。

リンカーは、CoolGuy.Flex()を探してAssembly2をプルし、「LinkAssembliesTask failed」で爆発し、Flex()メソッドが見つからなかったことを示しました。 間違ったアセンブリを見ているため、できませんでした。

NetStandardプロジェクトは、Assembly1を参照していたためコンパイルされ、AndroidProjectが参照しているものを実際に気にしませんでした。独立して構築されています。しかし、リンカがAssembly2をロードしたとき、「間違った」アセンブリを使用していました。

幸運なことに、私はアセンブリの1つが使用されていないことに気付いたので、それを削除してビルドを成功させました。

誰かが助けになることを願っています。

=====

ボーナス:検索するアセンブリを選択する場合は、ビルドを失敗させてから、{project}\obj {profile} {Android_version}\Android\assetsフォルダーに移動して、dllを見つけます。おそらくそこにないことを確認し、失敗の理由を理解するための出発点を与えることができるでしょう。

0
NightShovel

私の追跡では、リンカープロパティ(リンカー->リンク)を「なし」に変更しました。 Visual Studio 2017 RCを使用しています

0

Androidターゲットバージョンを9.0に変更すると、このエラーが発生しました。気づいたのは、Androidプロジェクトのpackages.configすべてのパッケージは、monoandroid81ではなくmonoandroid90をターゲットとしていました。

NuGetパッケージをすべて再インストールするだけで解決しました。これは、Visual Studioのパッケージマネージャーコンソールから次のように入力することにより、非常に簡単に実行できます。

Update-Package -Reinstall

ただし、最初にバックアップを取ることをお勧めします。

その後、すべてのパッケージは正しいバージョンを対象としており、コンパイルエラーはなくなりました。

0
Raziel