как прочитать манифест сборки без загрузки .dll

StackOverflow https://stackoverflow.com/questions/1212801

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top