需要以编程方式读取依赖项,而不加载程序集本身,因为这样就无法卸载它们。
我发现使用 System.Reflection.Assembly.ReflectionOnlyLoadFrom(path) 可以解决这个问题。
AppDomain
来加载你的程序集。卸载整个AddDomain
也将卸载已加载的程序集(但仅限于使用此AppDomain
加载的那些程序集)。Kumar,
你可以卸载 .Net DLLs,但你必须使用 AppDomain 对象来首先加载它们,然后再次卸载。
请参考: http://msdn.microsoft.com/en-us/library/system.appdomain(VS.80).aspx
如果你仍然想避免这种类型的进程,我想你可以自己解析 DLL,但这比使用 AppDomain 要更费力。
-p
var assemblyDef = dnlib.DotNet.AssemblyDef.Load("myDllName.dll");
var manifest = assemblyDef.ManifestModule; // do whatever you want from here
参考链接: https://www.nuget.org/packages/dnSpyLibs
我在博客上发表了一篇文章: https://medium.com/angular-and-dot-net/reading-assembly-info-without-loading-it-in-c-31a4bea7ef73
我相信如果我错了,肯定会有人纠正我,但是清单不只是DLL中的另一个资源吗?如果是这样,您可以像读取任何其他资源一样读取它。
这里有一个开源工具,可以让您探索DLL的资源:
http://www.wilsonc.demon.co.uk/d10resourceeditor.htm
果然,我可以使用它查看嵌入式清单。
因此,使用LoadLibrary()加载DLL并进行资源搜索。
希望你期待着 Ildasm.exe(中间语言反汇编器)
http://msdn.microsoft.com/en-us/library/aa309387(VS.71).aspx