2007-03-22

当Remoting遇见COM

关键字: .NET Remoting COM
谁动了我的assembly?
你有没有曾经把.NET的用对象变成过COM对象?你有没有用过.NET Remoting?那你有没有两者同时用呢?如果你有,可能你也遇过同一个问题。.NET抱怨说,找不到要序列化的Assembly。因为COM对象被执行的时候,其所处的位置是宿主的位置,而不是Assembly所在的位置了。由于Binary Formatter查询Assembly的一个小问题,导致了这个错误信息。在MSDN论坛上抄来如下代码,解决了问题:
        private static Assembly CurrentDomain_AssemblyResolve(object sender, 
 ResolveEventArgs args)
        {
            Assembly ayResult = null;
            string sShortAssemblyName = args.Name.Split(',')[0];
            Assembly[] ayAssemblies = AppDomain.CurrentDomain.GetAssemblies();
            foreach (Assembly ayAssembly in ayAssemblies)
            {
                if (sShortAssemblyName == ayAssembly.FullName.Split(',')[0])
                {
                    ayResult = ayAssembly;
                    break;
                }
            }
            return ayResult;
        }

把这段代码注册到Current Domain的AssemblyResolve事件上。注册的最佳时机是静态构造函数:
static YourClass()
{
  AppDomain.CurrentDomain.AssemblyResolve += 
new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}

希望上天保佑我们的奶酪不会再被乱动了。
评论
发表评论

您还没有登录,请登录后发表评论

taowen
搜索本博客
最近访客
我的相册
C6038ae3-566b-4f0f-a7a4-4e96c192012b-thumb
step2
共 6 张
存档
最新评论