3

一点背景知识:我最近从其源代码 ( https://github.com/ServiceStack/ServiceStack ) 重新编译了 ServiceStack 库。在完成一些错误修复后,我还重新编译了 ServiceStack.Text 项目。我将 ServiceStack.Text dll 文件复制到 ServiceStack 项目的“lib”文件夹中(因为 ServiceStack 解决方案不包括 Text 中的序列化程序,所以它在那里)。

现在我得到 TypeLoadExceptions,如下:

System.TypeLoadException:来自程序集“ServiceStack.ServiceInterface,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”的“ServiceStack.ServiceInterface.Testing.MockHttpResponse”类型中的方法“get_StatusCode”没有实现。在 System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes) 在 System.Reflection.RuntimeAssembly.GetExportedTypes() 在----我的代码从这里...----

我不确定问题可能是什么。我怀疑这可能是一个循环 DLL 引用问题(DLL Hell),因为引用了 ServiceStack.OrmLite(它还引用了该项目中的其他解决方案);但是,在删除对 ServiceStack 项目的所有引用后,我仍然没有解决问题。

这篇文章似乎有一些想法,但我没有任何运气来完成这些: TypeLoadException says 'no implementation',but it is implemented

4

1 回答 1

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

如果您使用的是v3.9.38的 ServiceStack.dll,您需要确保 ServiceStack 之上的所有子组件至少为v3.9.38

于 2013-03-14T19:50:29.747 回答