我有一个共享PCL项目的iOS / Android Xamarin项目。
我已根据Xamarin's Tutorial通过ASMX向PCL添加了一个Web引用。本教程没有说明如何进入“添加Web引用”窗口,但我们通过右键单击我们的PCL项目并转到Add->Web Reference
找到它。
在添加Web引用时,我得到一个大约500行的Reference.cs文件,该文件被添加到PCL中。
然而,在编译时,无论是iOS还是Android,我都会遇到以下错误:
Reference.cs(74,74):错误CS0234:类型或命名空间名称
IExtensibleDataObject' does not exist in the namespace
System.Runtime.Serialization'。你错过了装配参考吗? (CS0234)(MyProject)
很明显,我需要添加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
的任何引用。
答案 0 :(得分:2)
我认为这些文档指的是在Xamarin.iOS
和Xamarin.Android
中使用它们(至少对于.asmx
文档)。您可以通过右键点击System.Runtime.Serialization
/ References
项目中的Xamarin.iOS
转到Xamarin.Android
,转到Edit References
,然后转到All
标签它应该列在BCL (Base Class LIbrary)
下面。您可能需要在Interface
中使用基于PCL
的模式来调用相应的本机Web服务。您也可以尝试将.asmx
打包成REST service
并使用HttpClient
。
查看此示例项目(https://developer.xamarin.com/samples/xamarin-forms/WebServices/TodoASMX/)会在Interface
中使用ISoapService
并在本机项目中实现,从而显示上述基于PCL
的模式。您会看到每个项目(Droid/iOS
)都包含Web Reference
。 PCL纯粹是在调用代码。
考虑到围绕它们构建的框架,使用.asmx
的更多限制。使用WCF
或REST
可以更好地直接从PCL消费。但请注意,PCL将被NetStandard
库味道替换。