【问题标题】:"System.Runtime.Serialization'. Are you missing an assembly reference?" after adding web reference“System.Runtime.Serialization”。您是否缺少程序集引用?添加网络参考后
【发布时间】: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.iOSXamarin.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


【解决方案1】:

我相信这些文档指的是在Xamarin.iOSXamarin.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 的限制更大。使用 WCFREST 可以更好地直接从 PCL 消费。但请注意,PCL 将被 NetStandard 库风格取代。

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2020-04-18
    • 2019-01-23
    相关资源
    最近更新 更多