首先,对不起,我的英语
今天,我在一个不可能的问题上...
我有两个部分的应用程序:
- 在Xamarin Android中应用
- 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/