我试图找到解决方案,但我失败了......
来自给定程序集的我得到了包含它的所有“类名”。 这看起来很简单,但问题是当目标程序集有些引用未解析时。例如,当目标程序集不依赖于任何其他程序时,此代码可以正常工作:
Dim loAssembly As Reflection.Assembly = Reflection.Assembly.Load(loRawAssembly)
Dim loTypes As Type() = loAssembly.GetTypes()
For Each t As Type In loTypes
If t.IsClass Then
'do something with class names
End If
Next t
如果我使用AppDomain.CurrentDomain.AssemblyResolve,解决所需的程序集然后工作,但永远不可能确定IT。 然后我想知道是否有另一种方法从一个给定的程序集中获取类名?
韩国社交协会
答案 0 :(得分:0)
答案 1 :(得分:0)
寻求帮助。
我在这里找到了我的解决方案,使用Mono.Cecil:
Finding classes in a DLL that inherit from classes in an unavailable assembly
现在我的代码可以这样做:
Imports Mono.Cecil
Imports Mono.Cecil.Cil
Dim loMemStream As New IO.MemoryStream(pRawBytes)
Dim loListOfClass As New List(Of String)
Dim loAssDefininition As AssemblyDefinition = AssemblyDefinition.ReadAssembly(loMemStream)
Dim loTypes = loAssDefininition.MainModule.Types
For Each elemento In loTypes
If elemento.HasInterfaces Then
For Each loInterface In elemento.Interfaces
If UCase(loInterface.FullName) = UCase(pTargetInterface) Then
loListOfClass.Add(elemento.FullName)
End If
Next
End If
Next
Return loListOfClass