C# Xamarin中的可移植类库在iOS模拟器上工作,但不在设备上工作

C# Xamarin中的可移植类库在iOS模拟器上工作,但不在设备上工作,c#,ios,xamarin,xamarin.ios,dotnet-httpclient,C#,Ios,Xamarin,Xamarin.ios,Dotnet Httpclient,我们有一个Xamarin跨平台应用程序,它使用定制的可移植类库与我们公司的API接口。我们遇到的问题是,当我们在iOS模拟器上使用应用程序通过PCL发出请求时,一切正常,但当我们尝试在实际设备上执行相同的操作时,我们会从API返回“错误请求”错误代码 我们已经能够确定,当应用程序在设备上运行时,我们正在制作的帖子中的body参数为null,但是当我们在模拟器上执行相同的操作时,这些参数具有我们传入的值 我们的PCL正在使用System.Net.HttpClient,因此我们认为这个答案可能会有所

我们有一个Xamarin跨平台应用程序,它使用定制的可移植类库与我们公司的API接口。我们遇到的问题是,当我们在iOS模拟器上使用应用程序通过PCL发出请求时,一切正常,但当我们尝试在实际设备上执行相同的操作时,我们会从API返回“错误请求”错误代码

我们已经能够确定,当应用程序在设备上运行时,我们正在制作的帖子中的body参数为null,但是当我们在模拟器上执行相同的操作时,这些参数具有我们传入的值

我们的PCL正在使用System.Net.HttpClient,因此我们认为这个答案可能会有所帮助: 遗憾的是,这不起作用,因为Xamarin应用程序似乎无论如何都不使用app.config文件

我们已尝试检查以确保PCL和iOS项目都引用了相同版本的System.Net.HttpClient,但这似乎也无法解决问题

我们还在以下错误报告中尝试了解决方法,但没有成功:

这篇文章在过去曾帮助过我们,但似乎对这种情况没有帮助:

当应用程序在模拟器和设备上运行时,有几个不同之处

其中之一是,托管链接器在模拟器构建时禁用(使用JIT时速度更快),而在设备构建时启用(相同的逻辑:AOT构建时速度更快)

应用程序可能使用反射(直接或间接),并且需要保留一些成员(例如序列化)


您可以通过在模拟器构建中启用托管链接器(或在设备构建中禁用托管链接器)来尝试这一点。这将告诉您您的问题是否与托管链接器有关。

谢谢!结果表明,链接器已为设备构建启用,但为模拟器禁用。禁用设备生成的链接器解决了此问题。你知道这是否会潜在地影响应用程序发布时的性能/稳定性吗?是的,没有链接器,你的应用程序将是巨大的,因为它将包含大部分BCL,而链接器无法进行任何优化。您需要查找并保留通过反射使用的成员。