Подтвердить что ты не робот

Не удалось выполнить задачу "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 и лабораторий форм xamarin. Минимальный уровень 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)
4b9b3361

Ответ 1

По-видимому, это известная проблема: Xamarin Forms требует TargetAndroidVersion равным 21. (В конфигурационном графическом интерфейсе это называется "Скомпилировать с использованием версии Android": )

Ответ 2

В моем случае проблема возникла из-за добавления Xamarin.ios.dll в Portable Project. Я удалил эту ссылку и теперь работает

Ответ 3

В моем случае проблема была связана с dll Xamarin.iOS в проекте pcl. Связывание не работает для этой сборки. Исправлена ​​проблема с исправлением.

Ответ 4

Я изменил свойства компоновщика> Связывание только с сборок Sdk на сборки Sdk и пользователей для конфигурации выпуска.

options

Ответ 5

Я также испытал ту же проблему. После серии проб и ошибок я нашел решение.

В вашем Манифесте установите Target Android Version на Android 7.1 (API Level 25 Nougat) или выше. Также установите Compile для Android версии Android 7.1.

надеюсь, это поможет

Ответ 6

Я исправил его, понизив Xamarin.Android.Support.v4 до версии 21.0.0 в NuGet Package Manager. Надеюсь, что поможет вам

Ответ 7

У этой проблемы нет 1 решения, ошибка может быть вызвана как минимум 10 комбинациями или конфигурациями, которые вы установили для своего проекта, я сталкивался с этой ошибкой 100 раз и каждый раз отличался от других. И эта точная ошибка + многие другие заставили меня бросить xamarin даже на все продукты Microsoft навсегда

Разбудите парней и станьте родными, они пытаются промыть ваш мозг ложью об этой штуке ксамарин, ничего, она сумасшедшая, полная ошибок

Любое приложение может быть разработано изначально (java + swift) за меньшее время, поверьте мне, что со мной случилось, я сделал около 10 приложений в xamarin, и после того, как я был разочарован, я переключился на native, теперь я могу сказать, что то же самое приложение занимает все больше и больше времени, если вы хотите сделать это с помощью xamarin (и это должно быть противоположным)

Ответ 8

Я получил эту ошибку после изменения целевой версии Android на 9.0. Что я заметил, так это то, что в monoandroid81 packages.config проекта Android все пакеты все еще были нацелены на monoandroid81 а не на monoandroid90.

Я решил это, просто переустановив все пакеты NuGet. Это можно сделать довольно легко через консоль диспетчера пакетов в Visual Studio, введя:

Update-Package -Reinstall

Я рекомендую сначала сделать резервную копию.

После этого все пакеты были нацелены на правильную версию, и ошибки компиляции исчезли.

Ответ 9

У меня была другая основная причина ошибки "Ошибка 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. Скорее всего, вы сможете проверить, что его там нет, и дать вам отправную точку для понимания, почему он не работает.

Ответ 10

В моем преследовании я изменил свойство компоновщика (Linker → Linking) на "None". Я использую visual studio 2017 RC

Ответ 11

Jus Я изменил ссылку с "NONE" на "sdk и сборку пользователей", и я запустил свое решение, и проблема была решена. после этого вы можете изменить "сборка sdk и users" на "NONE" и запустить проект без каких-либо проблем.

Но размер файла выпуска может быть изменен.

введите здесь описание изображения

Ответ 12

Я решил изменить параметры Android Linker Behavior в настройках > Android Builder > Linker из "Link sdk Assemblies Only", чтобы "не ссылаться".