"LinkAssemblies" 任务在 Xamarin Android 中意外失败
The "LinkAssemblies" task failed unexpectedly in Xamarin Android
我正在尝试 POST 使用 REST API 的数据。该应用程序过去 运行 完美无缺,但现在我添加了执行 POST 的代码,但出现了新错误。任何人都可以帮助解释问题所在并提出替代方案让我成功完成 POST 请求吗?
这是我尝试使用发布配置中启用的链接器构建应用程序时遇到的错误:
Error The "LinkAssemblies" task failed unexpectedly.
Xamarin.Android.XamarinAndroidException: error XA2006: Reference to metadata item 'System.Runtime.InteropServices.StandardOleMarshalObject' (defined in 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') from 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' could not be resolved. ---> Mono.Cecil.ResolutionException: Failed to resolve System.Runtime.InteropServices.StandardOleMarshalObject
at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
at Mono.Linker.Steps.MarkStep.InitializeType(TypeDefinition type)
at Mono.Linker.Steps.MarkStep.InitializeAssembly(AssemblyDefinition assembly)
at Mono.Linker.Steps.MarkStep.Initialize()
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__26.MoveNext() GimcoIOT.Andriod
您似乎已经在 Xamarin.Android 应用程序中添加了对桌面 .NET 程序集的引用。 System.Windows.Forms
命名空间在 Xamarin.Android 配置文件中不可用。 (即使应用程序 builds 在您禁用链接时成功,理论上它仍然会在 运行 time 尝试任何时候失败运行 引用 System.Windows.Forms
命名空间的代码。)
要解决此问题,您需要从 Xamarin.Android 项目中删除对桌面 .NET 程序集的引用,并确保所有其他引用的程序集都针对 Xamarin.Android配置文件或受支持的 PCL 配置文件。
如documentation所述:
Xamarin.Android is not ABI compatible with existing assemblies compiled for a different profile. You must recompile your source code to generate assemblies targeting the Xamarin.Android profile (just as you need to recompile source code to target Silverlight and .NET 3.5 separately).
(便携式 Class 库是此规则的特殊例外。)
如果您当前正在使用来自 System.Windows.Forms
命名空间的类型来执行 POST 请求,那么您将需要切换到不同的类型。例如,来自 System.Net.Http.HttpClient
的 PostAsync()
方法之一可能工作得很好。
我正在尝试 POST 使用 REST API 的数据。该应用程序过去 运行 完美无缺,但现在我添加了执行 POST 的代码,但出现了新错误。任何人都可以帮助解释问题所在并提出替代方案让我成功完成 POST 请求吗?
这是我尝试使用发布配置中启用的链接器构建应用程序时遇到的错误:
Error The "LinkAssemblies" task failed unexpectedly.
Xamarin.Android.XamarinAndroidException: error XA2006: Reference to metadata item 'System.Runtime.InteropServices.StandardOleMarshalObject' (defined in 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') from 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' could not be resolved. ---> Mono.Cecil.ResolutionException: Failed to resolve System.Runtime.InteropServices.StandardOleMarshalObject
at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
at Mono.Linker.Steps.MarkStep.MarkType(TypeReference reference)
at MonoDroid.Tuner.MonoDroidMarkStep.MarkType(TypeReference reference)
at Mono.Linker.Steps.MarkStep.InitializeType(TypeDefinition type)
at Mono.Linker.Steps.MarkStep.InitializeAssembly(AssemblyDefinition assembly)
at Mono.Linker.Steps.MarkStep.Initialize()
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__26.MoveNext() GimcoIOT.Andriod
您似乎已经在 Xamarin.Android 应用程序中添加了对桌面 .NET 程序集的引用。 System.Windows.Forms
命名空间在 Xamarin.Android 配置文件中不可用。 (即使应用程序 builds 在您禁用链接时成功,理论上它仍然会在 运行 time 尝试任何时候失败运行 引用 System.Windows.Forms
命名空间的代码。)
要解决此问题,您需要从 Xamarin.Android 项目中删除对桌面 .NET 程序集的引用,并确保所有其他引用的程序集都针对 Xamarin.Android配置文件或受支持的 PCL 配置文件。
如documentation所述:
Xamarin.Android is not ABI compatible with existing assemblies compiled for a different profile. You must recompile your source code to generate assemblies targeting the Xamarin.Android profile (just as you need to recompile source code to target Silverlight and .NET 3.5 separately).
(便携式 Class 库是此规则的特殊例外。)
如果您当前正在使用来自 System.Windows.Forms
命名空间的类型来执行 POST 请求,那么您将需要切换到不同的类型。例如,来自 System.Net.Http.HttpClient
的 PostAsync()
方法之一可能工作得很好。