Essentially need to read the dependencies programmatically without loading the assembly itself, as then you can't unload them
相关问题
- Sorting 3 numbers without branching [closed]
- Graphics.DrawImage() - Throws out of memory except
- Generic Generics in Managed C++
- Why am I getting UnauthorizedAccessException on th
- 求获取指定qq 资料的方法
Use DnSpy (it won't load the dll in your program):
ref: https://www.nuget.org/packages/dnSpyLibs
I did a blog post on that: https://medium.com/angular-and-dot-net/reading-assembly-info-without-loading-it-in-c-31a4bea7ef73
found this System.Reflection.Assembly.ReflectionOnlyLoadFrom(path) does the trick
2 solutions come to my mind, although I think there's easier way (which I forgot or don't know :) ):
1. Load your assemblies using some additional
AppDomain
that you can create. Unloading wholeAddDomain
will also unload loaded assemblies (but only those, which were loaded using thisAppDomain
).2. Use some api, for example CCI that allows you to look inside managed dll's without loading it using reflection mechanism.
I'm sure someone will correct me if I'm wrong, but isn't the manifest just another resource in the DLL? If so, you can read it just like any other resource.
Here is an open source tool that lets you explore a DLLs resources:
And sure enough, I can see embedded manifests with it.
So, load the DLL using LoadLibrary() and go resource hunting.
Kumar,
You CAN unload .Net DLLs but you have to use the AppDomain object to load them in the first place and then again to unload.
Take a look: http://msdn.microsoft.com/en-us/library/system.appdomain(VS.80).aspx
If you still want to avoid this type of process, i suppose you could parse the the DLL yourself but that would be much more work than using the AppDomain i think.
-p
Hope you are expecting Ildasm.exe (intermediate language disassembler)
http://msdn.microsoft.com/en-us/library/aa309387(VS.71).aspx