“LinkAssemblies”任务意外失败

时间:2015-02-10 04:45:27

标签: xamarin xamarin.forms xamarin-studio

当我们尝试在发布模式下构建一个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表格和xamarin表格实验室。我们使用的最低Android API级别是17.我甚至尝试过最低版本的sdk。

更多细节:

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)

12 个答案:

答案 0 :(得分:22)

显然,this is a known issue:Xamarin Forms需要TargetAndroidVersion为21.(在配置GUI中,这标题为&#34;使用Android版本进行编译:&#34;)

答案 1 :(得分:4)

在我的情况下出现问题是因为将Xamarin.ios.dll添加到Portable Project引用中。我已删除该引用,现在可以使用

答案 2 :(得分:3)

在我的情况下,问题是在pcl项目中引用了dll Xamarin.iOS。链接不适用于此程序集。删除引用修复了问题。

答案 3 :(得分:1)

我也遇到了同样的问题。经过一系列的试验和错误,我找到了解决方案。

在你的Manifest中将目标Android版本设置为Android 7.1(API级别25牛轧糖)或更高版本。 将Android版本编译设置为Android 7.1。

我希望这会有所帮助

答案 4 :(得分:1)

我更改了链接器属性&gt;仅从Sdk程序集链接到发布配置的Sdk和用户程序集。

options

答案 5 :(得分:0)

我修复了它将Xamarin.Android.Support.v4降级到NuGet Package Manager中的21.0.0版本。希望能帮到你

答案 6 :(得分:0)

将Android目标版本更改为9.0后,我最终收到此错误。我注意到的是,在Android项目的packages.config中,所有软件包仍以monoandroid81而不是monoandroid90为目标。

我通过重新安装所有NuGet软件包来解决了这个问题。通过输入以下内容,可以很容易地通过Visual Studio中的Package Manager控制台完成此操作:

Update-Package -Reinstall

不过,我建议先进行备份。

之后,所有软件包都以正确的版本为目标,并且编译错误也消失了。

答案 7 :(得分:0)

对于“ LinkAssembliesTask失败”错误,我有不同的根本原因。

我正在升级NuGet软件包,并弄乱了引用。

=====

假设我有两个项目:

  1. NetStandardProject

    • 具有对Assembly1的引用。

    • Assembly1具有一类CoolGuy,带有CoolGuy.Flex()方法。

  2. AndroidProject,它引用了NetStandardProject。

    • 具有对Assembly2的引用。

    • Assembly2具有一类CoolGuy,但没有CoolGuy.Flex()方法。

链接器进入Assembly2,寻找CoolGuy.Flex(),然后炸毁“ LinkAssembliesTask失败”,表示找不到Flex()方法。不能,因为它正在寻找错误的程序集

已编译NetStandard项目,因为它正在引用Assembly1,并且实际上并不关心AndroidProject所引用的内容。它是独立构建的。但是当链接器加载Assembly2时,它使用的是“错误的”程序集。

最终我很幸运,意识到其中一个程序集未使用,因此我将其删除,然后构建成功。

希望可以帮助某人。

=====

奖金: 如果要查看选择的程序集,请让构建失败,然后转到{project} \ obj {profile} {android_version} \ android \ assets文件夹,并找到dll。您可能可以验证它是否不存在,并为您提供一个了解为什么失败的起点。

答案 8 :(得分:0)

将到旧的Mono android的链接更改为新的mono android。它为我工作。我从Monoandroid 8.0更改为Xamarin.Android.Platforms等某些dll的Monoandroid 9.0。

答案 9 :(得分:-1)

在我的追逐中,我将链接器属性(链接器 - &gt;链接)更改为“无”。我正在使用视觉工作室2017 RC

答案 10 :(得分:-2)

Jus我改变了#34; NONE&#34; to&#34; sdk和用户组装&#34;我运行了我的解决方案,问题已经解决了。之后你可以改变&#34; sdk和用户组装&#34;到&#34; NONE&#34;并毫无问题地运行您的项目。

但是发布文件的大小可能会有所改变。

enter image description here

答案 11 :(得分:-3)

我已解决了在选项&gt;中更改Android链接器行为选项的问题。 Android Builder&gt;链接器从“仅限链接sdk程序集”到“不链接”。