У меня есть программное обеспечение «A», в котором мне нужно добавить DLL «B» в качестве плагина. Я могу легко получить к нему доступ, используя отражение. DLL «B» ссылается на DLL, называемый «C» (объединен с Costura.Fody). < /Li>
У меня есть программное обеспечение «A», которое ссылается на DLL, называемый «C».
Внутри этого DLL «C», мне нужно получить имя собрания Caller: в сценарии 1 я получу «B», в то время как в сценарии 2 я получу « /> < /ol>
Как это сделать? < /p>
Я попробовал < /p>
Код: Выделить всё
Assembly.GetEntryAssembly() 'C.dll
Assembly.GetCallingAssembly() 'A.dll
Assembly.GetExecutingAssembly() 'A.dll
Process.GetCurrentProcess().MainModule.FileName 'C.dll
< /code>
И я также попробовал итерацию через кадры Stacktrace, чтобы получить первый отличный от сборки "C": < /p>
Dim st As New StackTrace()
Dim thisAssemblyName As String = Assembly.GetExecutingAssembly().GetName().Name
For i As Integer = 1 To st.FrameCount - 1
Dim frame = st.GetFrame(i)
Dim method = frame.GetMethod()
If method Is Nothing Then Continue For
Dim declaringType = method.DeclaringType
If declaringType Is Nothing Then Continue For
Dim asm = declaringType.Assembly
If asm.GetName().Name thisAssemblyName Then
Return asm
End If
Next
Return Nothing
edit
Я попытаюсь объяснить проблему более четко. Эта библиотека была первоначально разработана для взаимодействия только с программным обеспечением A.Exe , и печатает имя вызывающей сборки.
Теперь я пытаюсь создать плагин в форме DLL (
Код: Выделить всё
B.dll
Я хотел бы избежать прохождения сборки явно в качестве параметра.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... -in-a-soft