"System.Runtime.Serialization'. Are you missing an assembly reference?" 添加网络参考后
"System.Runtime.Serialization'. Are you missing an assembly reference?" after adding web reference
我有一个共享 PCL 项目的 iOS/Android Xamarin 项目。
我已经根据 Xamarin's Tutorial 通过 ASMX 添加了对 PCL 的网络引用。本教程没有说明如何到达 "Add Web Reference" window,但我们通过右键单击我们的 PCL 项目并转到 Add->Web Reference
.[=22= 找到了它。 ]
在添加 Web 引用时,我得到了一个大约 500 行的 Reference.cs 文件,该文件被添加到 PCL.
但是,在编译时,无论是 iOS 还是 Android,我都会遇到以下几个错误:
Reference.cs(74,74): Error CS0234: The type or namespace name IExtensibleDataObject' does not exist in the namespace
System.Runtime.Serialization'. Are you missing an assembly reference? (CS0234) (MyProject)
显然我需要添加 System.Runtime.Serialization
程序集引用。但是我不知道该怎么做,我花了几个小时寻找文档或任何相关解决方案。大多数帖子问题充其量看起来是切线的。
这个 forum post 提到了这个问题,但除了据说三年前就已经“修复”之外,没有给出任何解决方案。
现在前面提到的教程引用了一个"Add References…" 对话框来添加System.Web.Services.dll
如果您使用"Add files" 添加代理。但是,我在 IDE.
的任何地方都找不到这个对话框
我在右键单击参考文献时确实找到了 "Edit References"。这产生了带有这些选项卡的 window:
估计这里需要添加程序集,搜索了一下,没有找到。显然没有办法添加与 IDE 一起打包的程序集,您需要 "just know" 在哪里找到它们。查资料无果。
通过示例项目之一,我能够在 /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
。
我相信这些文档指的是在 Xamarin.iOS
和 Xamarin.Android
中使用它们(至少对于 .asmx
文档)。您可以通过右键单击 Xamarin.iOS
/Xamarin.Android
项目中的 References
进入 System.Runtime.Serialization
,转到 Edit References
,然后转到 All
选项卡它应该列在 BCL (Base Class LIbrary)
下。您可能需要在 PCL
中使用基于 Interface
的模式来调用相应的本机 Web 服务。您也可以尝试将 .asmx
包装成 REST service
并使用 HttpClient
。
查看此示例项目 (https://developer.xamarin.com/samples/xamarin-forms/WebServices/TodoASMX/) 显示了上述基于 Interface
的模式,在 PCL
中使用 ISoapService
并在本机项目中实施。您会看到每个项目 (Droid/iOS
) 中都有 Web Reference
。 PCL纯粹是调用代码。
考虑到围绕它们构建的框架,使用 .asmx
的更多限制。使用 WCF
或 REST
有更好的选择直接从 PCL 消费。但是请注意,PCLs 将被 NetStandard
库风格所取代。
我有一个共享 PCL 项目的 iOS/Android Xamarin 项目。
我已经根据 Xamarin's Tutorial 通过 ASMX 添加了对 PCL 的网络引用。本教程没有说明如何到达 "Add Web Reference" window,但我们通过右键单击我们的 PCL 项目并转到 Add->Web Reference
.[=22= 找到了它。 ]
在添加 Web 引用时,我得到了一个大约 500 行的 Reference.cs 文件,该文件被添加到 PCL.
但是,在编译时,无论是 iOS 还是 Android,我都会遇到以下几个错误:
Reference.cs(74,74): Error CS0234: The type or namespace name
IExtensibleDataObject' does not exist in the namespace
System.Runtime.Serialization'. Are you missing an assembly reference? (CS0234) (MyProject)
显然我需要添加 System.Runtime.Serialization
程序集引用。但是我不知道该怎么做,我花了几个小时寻找文档或任何相关解决方案。大多数帖子问题充其量看起来是切线的。
这个 forum post 提到了这个问题,但除了据说三年前就已经“修复”之外,没有给出任何解决方案。
现在前面提到的教程引用了一个"Add References…" 对话框来添加System.Web.Services.dll
如果您使用"Add files" 添加代理。但是,我在 IDE.
我在右键单击参考文献时确实找到了 "Edit References"。这产生了带有这些选项卡的 window:
估计这里需要添加程序集,搜索了一下,没有找到。显然没有办法添加与 IDE 一起打包的程序集,您需要 "just know" 在哪里找到它们。查资料无果。
通过示例项目之一,我能够在 /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
。
我相信这些文档指的是在 Xamarin.iOS
和 Xamarin.Android
中使用它们(至少对于 .asmx
文档)。您可以通过右键单击 Xamarin.iOS
/Xamarin.Android
项目中的 References
进入 System.Runtime.Serialization
,转到 Edit References
,然后转到 All
选项卡它应该列在 BCL (Base Class LIbrary)
下。您可能需要在 PCL
中使用基于 Interface
的模式来调用相应的本机 Web 服务。您也可以尝试将 .asmx
包装成 REST service
并使用 HttpClient
。
查看此示例项目 (https://developer.xamarin.com/samples/xamarin-forms/WebServices/TodoASMX/) 显示了上述基于 Interface
的模式,在 PCL
中使用 ISoapService
并在本机项目中实施。您会看到每个项目 (Droid/iOS
) 中都有 Web Reference
。 PCL纯粹是调用代码。
考虑到围绕它们构建的框架,使用 .asmx
的更多限制。使用 WCF
或 REST
有更好的选择直接从 PCL 消费。但是请注意,PCLs 将被 NetStandard
库风格所取代。