一点背景知识:我最近从源代码(https://github.com/ServiceStack/ServiceStack)重新编译了ServiceStack库。在完成一些错误修复后,我还重新编译了ServiceStack.Text项目。我将ServiceStack.Text dll文件复制到ServiceStack项目的“lib”文件夹中(它存在,因为ServiceStack解决方案不包含Text中的序列化程序)。
现在我收到了TypeLoadExceptions,如下所示:
System.TypeLoadException:类型中的方法'get_StatusCode' 程序集中的“ServiceStack.ServiceInterface.Testing.MockHttpResponse” 'ServiceStack.ServiceInterface,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = null'没有实现。在 System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly,ObjectHandleOnStack retTypes)at System.Reflection.RuntimeAssembly.GetExportedTypes()at ---- my code 从这里...... ----
我不确定问题是什么。我怀疑它可能是循环DLL引用问题(DLL Hell),因为引用了ServiceStack.OrmLite(它也引用了该项目中的其他解决方案);但是,删除所有对ServiceStack项目的引用后,我仍然没有解决问题。
这篇文章似乎有一些想法,但我没有运气跟随这些:TypeLoadException says 'no implementation', but it is implemented
答案 0 :(得分:3)
您正在为不同版本的ServiceStack组件使用脏dll,这些组件应保持同步。
在每个主要ServiceStack组件的程序集中,dll被标记为版本号,这与在NuGet上部署的版本匹配,例如,最新版本的ServiceStack v3.9.38 ,您需要确保至少使用所有其他库的 v3.9.38 。
核心ServiceStack依赖关系矩阵如下所示:
ServiceStack.Text
+
> ServiceStack.Interfaces
> ServiceStack.Common
+
> ServiceStack.Redis
> ServiceStack.OrmLite
+
> ServiceStack
+
> ServiceStack.ServiceInterface
如果您使用的是ServiceStack.dll的 v3.9.38 ,则需要确保ServiceStack上方的所有子组件至少为 v3.9.38 。< / p>