4

我刚刚升级到最新的 Xamarin 版本,尽管引用了我的所有库,但我不断收到以下错误:

错误 CS0012:类型ServiceStack.ServiceHost.IReturn1' 在未引用的程序集中定义。考虑添加对程序集 `ServiceStack.Interfaces, Version=3.9.55.0, Culture=neutral, PublicKeyToken=null' (CS0012) (Place.Logic) 的引用

错误 CS0012:类型ServiceStack.ServiceHost.IReturn' is defined in an assembly that is not referenced. Consider adding a reference to assemblyServiceStack.Interfaces,版本 = 3.9.55.0,文化 = 中性,PublicKeyToken = null' (CS0012) (Place.Logic)

(我认为,monotouch DLL 在发布版本上的版本号不正确)

****更新

来自评论和链接以及这个:Xamarin Studio iOS 程序集错误

如果不使用特定的命令行工具,似乎需要从源代码重新编译 DLL。

不幸的是,Servicestack monotouch 源文件上的源文件不完整,并且一直说:Servicestack.Text.Monotouch (Load failed)。有没有人设法重新编译这些并把它们供公众使用?

***更新

添加源文件的 monotouch 版本会导致 Xamarin Studio 抱怨文件不兼容,即。Monotouch v1.0,当尝试在同一解决方案文件中选择它们作为参考时。

***解决方法

我的 DTO DLL 引用了 ServiceStack DLL 并引发了版本控制等问题。所以我最终将 DTO 源文件从服务器端逻辑复制到了我的 Xamarin 项目中。虽然我不高兴我有相同代码的重复项,但现在可以工作:(

4

1 回答 1

1

一般来说,MonoTouch 项目只能引用其他 MonoTouch 项目或 MonoTouch 构建的程序集。(您可以对目标适当的可移植类库进行例外处理。)

因此,即使您的应用程序引用了 ServiceStack MonoTouch 程序集,但您的 DTO 项目引用了非 MonoTouch ServiceStack 程序集,并且您的应用程序引用了该 DTO 项目,它也会如您所描述的那样失败。

所以,是的,正如你所提到的,将 MonoTouch 项目与具有相同源的标准项目放在一起是常见的做法。MonoTouch 项目只是一个引用标准项目中文件的外壳。(有多种做法可以使这些项目保持同步,这是一个持续开发的领域。例如,一个技巧是在 .csproj 文件中使用通配符。)

最后,值得注意的是,您在客户端应用程序中引用的 ServiceStack 版本并不需要与服务器项目中引用的 ServiceStack 版本严格匹配。ServiceStack 解析服务 URL 和序列化/反序列化 DTO 的约定相当稳定。因此,您可以在不升级客户端的情况下升级服务器上的 ServiceStack。

于 2013-08-07T17:14:47.140 回答