как прочитать манифест сборки без загрузки .dll
-
06-07-2019 - |
Вопрос
По сути, необходимо программно прочитать зависимости без загрузки самой сборки, так как тогда вы не сможете их выгрузить
Решение
2 решения приходят мне на ум, хотя я думаю, что есть более простой способ (который я забыл или не знаю :)):
1. Загрузите свои сборки, используя некоторые дополнительные AppDomain
, которые вы можете создать. Выгрузка всего AddDomain
также будет выгружать загруженные сборки (но только те, которые были загружены с использованием этого AppDomain
).
2. Используйте API, например, CCI , который позволяет вам заглянуть внутрь управляемых dll, не загружая их с помощью механизма отражения . р>
Другие советы
нашел это System.Reflection.Assembly.ReflectionOnlyLoadFrom (путь) делает трюк
Кумар,
Вы можете выгружать библиотеки DLL .Net, но вам нужно использовать объект AppDomain, чтобы сначала загрузить их, а затем снова выгрузить.
Взгляните: http://msdn.microsoft.com/en-us/library/system.appdomain (ПРОТИВ 80).aspx
Если вы все еще хотите избежать этого типа процесса, я полагаю, вы могли бы разобрать библиотеку DLL самостоятельно, но, я думаю, это потребовало бы гораздо больше работы, чем использование AppDomain.
-п
Надеюсь, вы ожидаете Ildasm.exe (дизассемблер промежуточного языка)
http://msdn.microsoft.com/ ан-нас / библиотека / aa309387 (VS.71) .aspx
Я уверен, что кто-то исправит меня, если я ошибаюсь, но не является ли манифест просто еще одним ресурсом в DLL? Если это так, вы можете прочитать его, как и любой другой ресурс.
Вот инструмент с открытым исходным кодом, который позволяет вам исследовать ресурсы DLL:
http://www.wilsonc.demon.co.uk/d10resourceeditor.htm
И, конечно же, я вижу встроенные манифесты с ним.
Итак, загрузите DLL с помощью LoadLibrary () и отправляйтесь на поиски ресурсов.
Используйте DnSpy (он не загрузит DLL в вашей программе):
var assemblyDef = dnlib.DotNet.AssemblyDef.Load("myDllName.dll");
var manifest = assemblyDef.ManifestModule; // do whatever you want from here
ref: https://www.nuget.org/packages/dnSpyLibs р>
Я написал в блоге об этом: https://medium.com/angular-and-dot-net/reading-assembly-info-without-loading-it-in-c-31a4bea7ef73