2009-01-07 52 views
1

我有一個應用程序在我調用AppDomain.CreateInstanceAndUnwrap來實例化另一個AppDomain中的類型時拋出AmbiguousMatchException。這發生在我無法直接訪問的客戶計算機上。我認爲問題是加載了相同程序集的兩個副本。有沒有什麼辦法可以弄清楚這是否是這種情況,以及兩個組件是從哪裏加載的?將啓用融合日誌提供任何額外的信息?調用在.NET中調用AppDomain.CreateInstanceAndUnwrap時引發的AmbiguousMatchException

回答

0

融合日誌可能會有所幫助,但另一種選擇可能是掛鉤AssemblyLoad事件:

AppDomain.CurrentDomain.AssemblyLoad += (s, a) => 
    { 
     Console.WriteLine(a.LoadedAssembly.FullName); 
     Console.WriteLine(a.LoadedAssembly.CodeBase); 
    }; 

有此錯誤的兩個主要原因:

  • 巧合的命名 - 即Foo.dll和Bar.dll都有Some.Namespace.Type類型
  • 不同組件引用的不同版本(主要是GAC) - 即您的DAL加載某些dll的v2,並且您的UI /實用程序代碼加載相同的v4 dll的

當然,另一種選擇是,你AppDomain■找感染每個-等(這是非常(太?)很容易通過暴露它的MarshalByRef對象的API不小心吸了一個多AppDomain邊界參考)。

相關問題