【发布时间】:2016-08-04 23:04:07
【问题描述】:
我有一个共享 PCL 项目的 iOS/Android Xamarin 项目。
我已按照Xamarin's Tutorial 通过 ASMX 添加了对 PCL 的 Web 引用。教程没有说明如何进入“添加 Web 引用”窗口,但我们通过右键单击我们的 PCL 项目并转到 Add->Web Reference 找到它。
在添加网络参考时,我得到一个大约 500 行的 Reference.cs 文件,该文件被添加到 PCL。
但是,在编译时,无论是 iOS 还是 Android,都会出现以下几个错误:
Reference.cs(74,74):错误 CS0234:类型或命名空间名称
IExtensibleDataObject' does not exist in the namespaceSystem.Runtime.Serialization'。您是否缺少程序集参考? (CS0234) (我的项目)
很明显,我需要添加System.Runtime.Serialization 程序集引用。但是我不知道如何做到这一点,我花了几个小时寻找文档或任何相关的解决方案。大多数帖子问题充其量似乎是切题的。
这个forum post 提到了这个问题,但除了据说它在三年前“修复”之外没有给出任何解决方案。
现在,如果您使用“添加文件”添加代理,上述教程引用了一个“添加引用...”对话框来添加 System.Web.Services.dll。但是,我在 IDE 的任何地方都找不到这个对话框。
右键单击引用时,我确实找到了“编辑引用”。这产生了一个带有这些选项卡的窗口:
猜测需要在此处添加程序集我搜索它,但什么也没找到。显然没有办法添加与 IDE 一起打包的程序集,您应该“只知道”在哪里可以找到它们。搜索文档证明是徒劳的。
通过其中一个示例项目,我能够在 /Library/Frameworks/Mono.framework/Versions/4.4.2/lib/mono/xbuild-frameworks/.NETPortable/v4.5/Profile/Profile78/System.Runtime.Serialization.dll 找到 .dll 文件,并通过 .NET Assembly 选项卡手动添加它。
一位同事也尝试通过 NuGet 添加引用。
不幸的是,尝试任一方法后编译错误仍然存在。
另外,值得注意的是,ToDoASMX 示例项目和包含 System.Runtime.Serialization.dll 的文件夹似乎都引用了本教程提到的 System.Web.Services.dll。
【问题讨论】:
-
你运行的是什么版本的 C#?
-
@AlexKrupka 所有三个项目都表示 C# 版本的“默认”。我正在使用 Xamarin Studio Community 6.0.2 (build 73) 我不确定 IDE 的默认设置是什么,但看起来支持版本 6。
-
如何添加服务参考?你在创建代理吗?您是否只是右键单击并“添加 Web 服务”?您能否将复制步骤放入您的问题中,以便我们进一步调查?
-
感谢@JonDouglas 伸出援手。我已经为问题添加了更多细节。
-
我相信这些文档指的是在
Xamarin.iOS和Xamarin.Android中使用它们(至少对于.asmx文档)。您可以通过在Xamarin.iOS / Xamarin.Android项目中右键单击References访问System.Runtime.Serialization,转到Edit References,然后转到All选项卡,它应该列在BCL(基类库)下。您可能需要在 PCL 中使用基于Interface的模式来调用相应的本机 Web 服务。您也可以尝试将 .asmx 包装到 REST 服务中并使用HttpClient。
标签: c# xamarin portable-class-library web-reference