ServiceStack TypeLoadException - 未知来源

时间:2013-03-14 19:16:13

标签: c# servicestack typeloadexception

一点背景知识:我最近从源代码(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

1 个答案:

答案 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>