我刚刚升级到最新的Xamarin版本,尽管我的所有库都被引用了,但我一直收到这些错误:
错误CS0012:类型ServiceStack.ServiceHost.IReturn
1"是在未引用的程序集中定义的。考虑添加对程序集"ServiceStack.Interface,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,版本=3.9.55.0,区域性=中性,PublicKeyToken=null'(CS0012)(Place.Logic)
(我认为单点触控DLL在发布版本上的版本号不正确)
****更新
来自评论和链接和这个:Xamarin Studio iOS组装错误
如果不使用特定的命令行工具d,则似乎需要从源代码重新编译DLL。
不幸的是,Servicestack单点触控源文件上的源文件不完整,并且一直在说:Servicestack.Text.monotouch(加载失败)。有没有人设法重新编译这些文件并将其公开使用?
***更新
添加源文件的monotouch版本会导致Xamarin Studio在尝试选择文件作为同一解决方案文件中的参考时抱怨文件不兼容,即monotouch v1.0。
***解决方法
我的DTO DLL引用了ServiceStack DLL,并引发了版本控制等问题。因此,我最终从服务器端逻辑将DTO源文件复制到了我的Xamarin项目中。目前有效,尽管我不高兴我有相同代码的重复:(
一般情况下,MonoTouch项目只能引用其他MonoTouch工程或组件的MonoTouch构建。(您可以对目标适当的可移植类库进行例外处理。)
因此,即使您的应用程序引用ServiceStack MonoTouch程序集,但您的DTO项目引用了非MonoTouch ServiceStack程序集,并且您的应用程引用了该DTO项目,它也会失败,正如您所描述的那样。
所以,是的,正如你所提到的,将MonoTouch项目与具有相同来源的标准项目放在一起是一种常见的做法。MonoTouch项目只是一个引用标准项目中文件的shell。(有多种方法可以保持这些项目的同步,这是一个持续开发的领域。例如,一个技巧是在.csproj文件中使用通配符。)
最后,值得注意的是,您在客户端应用程序中引用的ServiceStack版本并不严格需要与服务器项目中引用的Service Stack版本匹配。ServiceStack解析服务URL和序列化/反序列化DTO的约定相当稳定。因此,您可以在不升级客户端的情况下升级服务器上的ServiceStack。