我刚刚升级到最新的 Xamarin 版本,虽然我的所有库都被引用,但我不断收到这些错误:
错误 CS0012:类型 ServiceStack.ServiceHost.IReturn
1' 在未引用的程序集中定义。考虑添加对程序集`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 assembly
ServiceStack.Interfaces, Version=3.9.55.0, Culture=neutral, PublicKeyToken=null' (CS0012) (Place.Logic)
(我认为单点触控 DLL 在发布版本上的版本号不正确)
****更新
来自评论和链接以及这个:Xamarin Studio iOS assembly error
如果不使用特定的命令行工具,似乎需要从源代码重新编译 DLL。
不幸的是,Servicestack monotouch 源文件上的源文件不完整,一直在说:Servicestack.Text.Monotouch (Load failed)。有没有人设法重新编译这些并将它们供公众使用?
***更新
添加源文件的单点版本会导致 Xamarin Studio 提示文件不兼容,即。 Monotouch v1.0,当尝试在同一解决方案文件中选择它们作为引用时。
***解决方法
我的 DTO DLL 引用了 ServiceStack DLL 并引发了版本控制等问题。所以我最终将 DTO 源文件从服务器端逻辑复制到我的 Xamarin 项目中。现在可以工作,虽然我不高兴我有相同代码的重复:(
最佳答案
通常,MonoTouch 项目只能引用其他 MonoTouch 项目或 MonoTouch 程序集版本。 (您可以为适当定位的可移植类库设置异常(exception)。)
因此,即使您的应用程序引用了 ServiceStack MonoTouch 程序集,但您的 DTO 项目引用了非 MonoTouch ServiceStack 程序集,并且您的应用程序引用了该 DTO 项目,它也会按照您的描述失败。
所以,是的,正如您所提到的,将 MonoTouch 项目与具有相同来源的标准项目放在一起是常见的做法。 MonoTouch 项目只是一个引用标准项目中文件的 shell 。 (有多种做法可以使这些项目保持同步,这是一个持续开发的领域。例如,一个技巧是在 .csproj 文件中使用通配符。)
最后,值得注意的是,您在客户端应用程序中引用的 ServiceStack 版本并不严格需要与服务器项目中引用的 ServiceStack 版本匹配。 ServiceStack 解析服务 URL 和序列化/反序列化 DTO 的约定相当稳定。因此,您可以在不升级客户端的情况下升级服务器上的 ServiceStack。
关于xamarin.ios - 更新后 Xamarin IOS 上的 Servicestack 程序集失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866524/