Xamarin Android 4.6中链接器的问题

aeius 发布于 2019-03-09 android 最后更新 2019-03-09 14:42 0 浏览

昨天我已经下载了Xamarin.Android的新版本,版本是4.6.2。当我试图构建我的项目,这些项目在以前的版本(< 4.6)中正确工作时,我得到以下错误: (对不起,这是在俄罗斯)

Ошибка  1   непредвиденная ошибка при выполнении задачи "LinkAssemblies".
System.ArgumentOutOfRangeException: Заданный аргумент находится вне диапазона допустимых значений.
в Mono.Collections.Generic.Collection`1.get_Item(Int32 index)
в Mono.Cecil.Mdb.MdbReader.ReadLocalVariables(MethodEntry entry, MethodBody body, Scope[] scopes)
в Mono.Cecil.Mdb.MdbReader.Read(MethodBody body, InstructionMapper mapper)
в Mono.Cecil.Cil.CodeReader.ReadMethodBody()
в Mono.Cecil.Cil.CodeReader.ReadMethodBody(MethodDefinition method)
в Mono.Cecil.MethodDefinition.<get_Body>b__2(MethodDefinition method, MetadataReader reader)
в Mono.Cecil.ModuleDefinition.ReadTItem,TRet
в Mono.Cecil.MethodDefinition.get_Body()
в Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
в Mono.Linker.Steps.MarkStep.ProcessQueue()
в Mono.Linker.Steps.MarkStep.Process()
в Mono.Linker.Steps.MarkStep.Process(LinkContext context)
в Mono.Linker.Pipeline.Process(LinkContext context)
в MonoDroid.Tuner.Linker.Process(LinkerOptions options, LinkContext& context)
в Xamarin.Android.Tasks.LinkAssemblies.Execute()
в Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
в Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext() AndroidApplication7
俄文文本的意思是:
Error 1 Unexpected error while trying to execute task "LinkAssemblies".
System.ArgumentOutOfRangeException: Provided argument is out off range
我花了很多时间试图理解这个错误,并发现这个错误出现在(两者):
  1. 使用Android.Support.V4库
  2. 建立链接模式设为完整
所以,我认为这是与支持库连接的链接器错误。无论使用Android.Support.V4的什么类或名称空间,该错误都会立即出现。 试图弄清楚事情我用一个FragmentActivity和一个DialogFragment做了一个示例项目。我已经在这个问题上转载了这个问题! 我想知道是否有临时或即时解决这个突破问题?这非常重要,因为这会冻结我们的开发过程。是的,我知道这个问题已发布到bug-tacker https://bugzilla.xamarin.com/show_bug.cgi?id=7946 以下是我如何制作示例项目。  1.在Visual Studio 2012中按下“新项目”并选择“Android应用程序”  2.将“最低Android目标”更改为1.6  3.将“配置属性”“链接”设置为“Sdk和用户程序集”  4.添加了对Android.Mono.Support.V4的引用  5.添加\更改了两个源文件 活动1:
public class Activity1 : FragmentActivity
{
    int count = 1;
protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
// Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);
// Get our button from the layout resource,
        // and attach an event to it
        Button button = FindViewById<Button>(Resource.Id.MyButton);
button.Click += delegate { button.Text = string.Format("{0} clicks!", count++);
                                     DialogFragment messageFragment = MyDialogFragment.GetInstance();
                                     messageFragment.Show(SupportFragmentManager, "MessageDialog");
        };
    }
}
MyDialogFragment:
 public class MyDialogFragment : DialogFragment
 {
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
    }
public static MyDialogFragment GetInstance()
    {
        return new MyDialogFragment();
    }
public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        var builder = new AlertDialog.Builder(Activity);
        builder.SetMessage("Message");
        builder.SetPositiveButton("Ok", (sender, args) => { });
return builder.Create();
    }
}
我认为任何人都可以重现它。如果不是,请评论你做了什么。
已邀请:

xid

赞同来自:

Xamarin.Android 4.6.2存在链接器问题,解决方法是执行以下操作:

backup and edit /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets remove all references to CopyMdbFiles
该信息来自Xamarin工程师Jon P. 如果您不想这样做,您可以暂时降级到4.6,直到修复程序发布(应该在接下来的几天内)。我已经验证4.6没有这个问题(好吧,我的应用程序使用Release配置构建时至少使用4.6构建)。 希望有所帮助。