System.Reflection.Assembly.LoadFile Locks File

I’m loading a DLL via System.Reflection.Assembly.LoadFile and reflecting over it’s members in a plugin-esque system.
I need to be able to update/overwrite these DLL while the system is running but it appears that after calling System.Reflection.Assembly.LoadFile the file is subsequently locked.
Does anyone know of a way to unlock the file?
I have read about loading the file in a separate appdomain? Are there any pitfalls to this approach?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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.

Method 2

Use Microsoft.Cci included in Microsoft FxCop

Sample for version 1.35:

using Microsoft.Cci;
// [...]
AssemblyNode assembly = AssemblyNode.GetAssembly(path);


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x