代码之家  ›  专栏  ›  技术社区  ›  Daniel Plaisted

调试调用AppDomain时抛出的AmbiguousMatchException。CreateInstanceAndUnwrap in。导航战鉴定小组

  •  1
  • Daniel Plaisted  · 技术社区  · 16 年前

    我有一个应用程序,当我调用AppDomain时,它抛出了一个AmbiguousMatchException。CreateInstanceAndUnwrap在另一个AppDomain中实例化一个类型。这发生在我无法直接访问的客户计算机上。我认为问题在于加载了同一程序集的两个副本。有没有办法弄清楚情况是否如此,以及这两个组件是从哪里装载的?启用融合日志会提供任何其他信息吗?

    1 回复  |  直到 16 年前
        1
  •  0
  •   Marc Gravell    16 年前

    融合日志可能会有所帮助,但另一种选择可能是挂钩 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/实用程序代码加载同一dll的v4

    当然,另一种选择是 AppDomain s已经相互感染了(很容易(太?)不小心吮吸了一个参考文献 应用程序域 通过在 MarshalByRef 对象)。

    推荐文章