2013-03-14 23 views
3

背景的一點:最近,我從它的源代碼(https://github.com/ServiceStack/ServiceStack)重新編譯ServiceStack庫。在完成一些錯誤修正後,我還重新編譯了ServiceStack.Text項目。我將ServiceStack.Text dll文件複製到ServiceStack項目的「lib」文件夾中(因爲ServiceStack解決方案不包含文本中的序列化程序,所以它在那裏)。ServiceStack TypeLoadException - 未知產地

現在我正在TypeLoadExceptions,如下所示:

System.TypeLoadException:方法在類型 'ServiceStack.ServiceInterface.Testing.MockHttpResponse' 'get_StatusCode' 從組件 「ServiceStack.ServiceInterface,版本= 1.0 .0.0,Culture = neutral, PublicKeyToken = null'沒有實現。在 System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly 組裝,ObjectHandleOnStack retTypes)在 System.Reflection.RuntimeAssembly.GetExportedTypes()----在我的代碼 從這裏...----

我不確定問題可能是什麼。我懷疑它可能是一個循環的DLL引用問題(DLL地獄),因爲ServiceStack.OrmLite被引用(這也引用回該項目中的其他解決方案);但是,刪除所有對ServiceStack項目的引用後,我仍然沒有解決問題。

這篇文章似乎有一些想法,但我還沒有與下面通過任何運氣:TypeLoadException says 'no implementation', but it is implemented

回答

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

+0

如何在構建它們時防止此問題?我不想構建_every_項目並複製_every_ dll,我只想要那些我使用的... – theMayer 2013-03-14 20:50:03

+0

如果你想從源代碼構建,你需要確保依賴組件被正確傳播。如果克隆下'C回購:\ ​​src'您可以使用每個主要解決方案的'/ build'文件夾內的build.bat腳本會自動創建一個副本釋放的dll到正確的目錄,例如在ServiceStack/lib中。 – mythz 2013-03-14 20:59:20

+0

這似乎不能解決問題。我刪除了所有的ServiceStack.OrmLite引用(和DLL的/ lib文件夾),並通過包括ServiceStack.Text項目(因此所有的引用是在VisualStudio中被編譯)重修的解決方案。我使用Git Cleanup清除了所有bin和obj文件夾。我還清除了所有Visual Studio緩存。如果有骯髒的DLL,我不知道它們來自哪裏。 – theMayer 2013-03-14 23:01:17