2017-08-01 39 views
0

我運行使用引用DLL代碼的異步任務。在這種情況下我貓錯誤消息,這個引用的DLL找不到。在async中加載程序集任務asp.net

Message: Unable to find assembly 'Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. 

    StackTrace: at System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly() 
    at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name) 
    at System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable) 
    at System.Runtime.Serialization.Formatters.Binary.ObjectMap.Create(String name, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable) 
    at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record) 
    at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run() 
    at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 
    at System.Runtime.Remoting.Channels.CrossAppDomainSerializer.DeserializeObject(MemoryStream stm) 
    at System.AppDomain.Deserialize(Byte[] blob) 
    at System.AppDomain.UnmarshalObject(Byte[] blob) 

如果代碼是在async Task中,那麼DLL是從不同的位置獲取的?我應該將其安裝到GAC嗎?

這是我的web.config:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> 
     </dependentAssembly> 

在Bin文件夾我有一個Newtonsoft.Json.Dll,我運行PowerShell腳本來檢查什麼版本,它是:

[Reflection.AssemblyName]::GetAssemblyName('MyLocation\Newtonsoft.Json.DLL').Version 

,其結果是:

Major Minor Build Revision 
----- ----- ----- -------- 
8  0  0  0 

然後我想檢查哪些組件加載到使用w3wp.exe進程並且有:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\xxx\Newtonsoft.Json.DLL 

所以我導航有複製的DLL和檢查版本(只是要確定),它是8.0.0.0

我不知道還有什麼我可以做: d

+1

你能展示一些你的代碼嗎? – JustinHui

+0

您必須發佈一些您正在使用的代碼。現在很難說,問題在哪裏 – Piotr

+1

我懷疑它與異步任務中的代碼有什麼關係。更有可能你有不同的依賴關係,需要不同版本的JSON.NET,並且你的綁定非常嚴格,以至於你的應用程序不會接受最終在bin文件夾中的版本。 – StriplingWarrior

回答

0

我看,這是一個跨域serailization例外從 CrossAppDomainSerializer到來,這是用來作爲遠程處理 基礎設施庫跨情境邊界撥打電話

這是源於您的代碼和遠程處理完成的問題,請參閱此SO post

希望這會有所幫助!

相關問題