If you use this:
System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path))
It will not lock the file.
Edit
While this works, it is not the best solution, but the better way of doing it is a lot more involved (too much for just pasting all the code here for it).
I have created a public repository on Github here with all the code for doing this properly:
Loading Assemblies without Locking by using Shadow Copying.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…