仅Linker SDK-对serviceModel.exceptiondetail的唯一读取成员



首先,对不起,我的英语

今天,我在一个不可能的问题上...

我有两个部分的应用程序:

  1. 在Xamarin Android中应用
  2. PCL(我使用PCL,因为该应用需要在WCF中调用Web服务)

在发行版中,将链接器设置为none,该应用程序像魅力一样工作,但是当我想将值设置为仅SDK时(用于减少APK尺寸)。我有一个错误(见下文)

堆栈跟踪的一部分:

System.Runtime.Serialization.InvalidDataContractException: Error on deserializing read-only members in the class: 
No set method for property 'Message' in type 'System.ServiceModel.ExceptionDetail'.
  at (wrapper managed-to-native) System.Object:__icall_wrapper_mono_delegate_end_invoke (object,intptr)
  at (wrapper delegate-end-invoke) <Module>:end_invoke_object__this___object[]&_IAsyncResult (object[]&,System.IAsyncResult)

在PCL的呼叫的异常中,错误会引起错误

我想,我需要创建一个这样的" linkDescratption"文件:

<?xml version="1.0" encoding="utf-8" ?>
<linker>
  <assembly fullname="System.ServiceModel">
    <type fullname="System.ServiceModel.ExceptionDetail" preserve="fields">
      <field name="Message" />
    </type>
  </assembly>
</linker>

,但我不知道我需要放入这个文件中。

系统信息:

  • VisualStudio:2013
  • Xamarin插件:最后一个稳定版本
  • JDK:1.8.0_102
  • android:4.4(kit kat)

你能帮我吗?如果缺少信息,请告诉我

预先感谢

您已经接近解决方案 - 实际上,我认为您的链接器配置文件应该起作用。您必须将其构建操作设置为" linkDescription"。

但是,您的方法非常细粒。我可能会尝试防止整个组件链接,并查看APK尺寸是否已经足够小,满足您的要求。您可以在Android Project的CSPROJ文件中使用<AndroidLinkSkip/>元素:

<PropertyGroup>
<AndroidLinkSkip>System.ServiceModel;System.Runtime.Serialization</AndroidLinkSkip>
</PropertyGroup>

请注意,在上面的示例中,我还包括了System.Runtime.Serialization,因为它也会引起您的问题。随意删除并无需尝试。

https://developer.xamarin.com/guides/android/undr_hood/build_process/

相关内容

最新更新