谁动了我的assembly?
你有没有曾经把.NET的用对象变成过COM对象?你有没有用过.NET Remoting?那你有没有两者同时用呢?如果你有,可能你也遇过同一个问题。.NET抱怨说,找不到要序列化的Assembly。因为COM对象被执行的时候,其所处的位置是宿主的位置,而不是Assembly所在的位置了。由于Binary Formatter查询Assembly的一个小问题,导致了这个错误信息。在MSDN论坛上抄来如下代码,解决了问题:
把这段代码注册到Current Domain的AssemblyResolve事件上。注册的最佳时机是静态构造函数:
希望上天保佑我们的奶酪不会再被乱动了。
你有没有曾经把.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);
}
希望上天保佑我们的奶酪不会再被乱动了。