【发布时间】:2012-02-10 05:43:56
【问题描述】:
我附加到AppDomain.AssemblyResolve 事件,然后调用Assembly.Load(byte[]) 来加载程序集。
似乎如果这是从多个线程完成的,我最终可能会加载重复的程序集。但是,如果我致电 Assembly.LoadFrom 或 Assembly.LoadFile,则不会出现此问题。
我只是想知道这是否是使用 Assembly.Load 的已知 qwerk?它不是线程安全的,我需要添加额外的代码来处理这种情况吗?
完整代码如下...
[TestFixture]
public class Tester
{
[Test]
public void Run()
{
var currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += ResolveAssembly;
var thread1 = new Thread(LoadAssembly);
var thread2 = new Thread(LoadAssembly);
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
var assemblies = currentDomain.GetAssemblies();
Assert.AreEqual(1, assemblies.Count(x => x.GetName().Name == "AssemblyToReference"));
}
Assembly ResolveAssembly(object sender, ResolveEventArgs args)
{
//This works
//return Assembly.LoadFile(@"PathToAssembly");
//This works
//return Assembly.LoadFrom(@"PathToAssembly");
//This does not work
return Assembly.Load(File.ReadAllBytes(@"PathToAssembly"));
}
void LoadAssembly()
{
Assembly.Load("AssemblyToReference");
}
}
【问题讨论】:
标签: .net assemblies