我在C#/ Azure應用程序中追蹤錯誤彙編參考問題的原因非常困難。我所尋找的並不是某個人告訴我對我的問題的確切解決方案,而是如何找到系統試圖加載的組件以及如何找出爲什麼要這樣做。如何在C#中找到錯誤的彙編參考號
當我們升級Azure工具時,問題出現了。真奇怪的是,當我試圖通過實體框架調用數據庫函數時,錯誤才發生(從我所知道的情況)。 EF會執行所有這些隱式的程序集加載,以及它如何變得困惑,並嘗試加載Microsoft.ServiceBus 1.8.0.0(或者正在查找該程序集)而不是版本2.2.0.0。
我們正在使用實體框架4.0。而且,僅供參考,我們可以調用存儲過程並完成其他類型的查詢。只有db函數調用會導致這個特定的問題。
我已經通過我的應用程序搜索到了高和低,並且可以在任何地方找到沒有提及1.8.0.0和沒有迷路1.8.0.0 dll的地方。我們可能會過時引用某些第三方庫,這些庫保留對1.8.0.0的引用,但我認爲這不太可能。
儘管如此,我的目標不是讓別人告訴我X是我的問題,而是讓我知道如何偵察實體框架並找出它試圖加載該程序集的原因以及它是什麼希望能夠找到它的實際發現。
這是我的完整堆棧跟蹤。
無法加載文件或程序集「Microsoft.ServiceBus,Version = 1.8.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35」或其某個依賴項。定位的程序集清單定義與程序集引用不匹配。 (從HRESULT異常:0x80131040) 在System.Reflection.RuntimeAssembly._nLoad(的AssemblyName文件名,字符串的代碼庫,證據assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,IntPtr的pPrivHostBinder,布爾throwOnFileNotFound,布爾forIntrospection,布爾suppressSecurityChecks) 在系統。 Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName assemblyRef,證據assemblySecurity,RuntimeAssembly reqAssembly,StackCrawlMark&stackMark,IntPtr的pPrivHostBinder,布爾throwOnFileNotFound,布爾forIntrospection,布爾suppressSecurityChecks) 在System.Reflection.Assembly.Load(的AssemblyName assemblyRef) 在System.Data.Metadata .Edm.MetadataAssemblyHelper.SafeLoadReferencedAssembly(AssemblyName程序集名稱) at System.Da ta.Metadata.Edm.MetadataAssemblyHelper.d__0.MoveNext() at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly,Boolean loadReferencedAssemblies,ObjectItemLoadingSessionData loadingData) at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly() Assembly Assembly,Boolean loadReferencedAssemblies,ObjectItemLoadingSessionData loadingData) at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly,Boolean loadReferencedAssemblies,ObjectItemLoadingSessionData loadingData) at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly,Boolean LoadReferencedAssemblies,ObjectItemLoadingSessionData loadingData) at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly,Boolean loadReferencedAssemblies,KnownAssembliesSet knownAssemblies,EdmItemCollection edmItemCollection,Acti on`1 logLoadMessage,對象&loaderCookie,Dictionary`2&typesInLoading,List`1&錯誤) 在System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection,裝配組件,布爾loadReferencedAssemblies,EdmItemCollection edmItemCollection,Action`1 logLoadMessage) 在System.Data.Metadata.Edm.ObjectItemCollection。ImplicitLoadAllReferencedAssemblies(Assembly assembly,EdmItemCollection edmItemCollection) at System.Data.Metadata.Edm.MetadataWorkspace.ImplicitLoadAssemblyForType(Type type,Assembly callingAssembly) at System.Data.Objects.ObjectContext.CreateQuery [T](String queryString,ObjectParameter [] parameters ) at c:\ Users \ RMacgrogan \ dev \ flightbridge \ BaseOps \ trunk \ FB中的Pallas.FlightBridge.Services.Internal.Data.Model.FlightBridgeDatabaseContext.TripPermissions(Nullable`1 companyPersonId)版本7.8 \ code \ InternalServices \ Data \ Model \ FlightBridgeDataModel.Designer.cs:line 3778 at c:\ Users \ RMacgrogan \ dev \ flightbridge \ BaseOps \ trunk \中的Pallas.FlightBridge.Services.Internal.Data.Repository.TripRepository.GetTripAndOrdersAndTravelers(Int32 tripId,Int32 companyPersonId) FB版本7.8 \ code \ InternalServices \ Data \ Repository \ TripRepository.cs:line 50
聽起來像你需要綁定重定向。 – danludwig
無法加載文件或程序集「Microsoft.ServiceBus,版本= 1.8.0.0」。檢查你的參考這一個。 – Tico
Tico我們在我們的代碼庫的任何地方都沒有任何對Service Bus 1.8.0.0的引用,我可以找到它們。我到處搜索。如果您有關於如何驗證我們確實沒有引用1.8的建議,我很樂意聽到它。 –