У меня есть DLL (vb.net), которая используется несколькими приложениями.
Я ссылался на DLL в нескольких приложениях .net (используя Visual Studio 2015).
Мне нужно определить, какое приложение вызывает функции.
бывший:
Public Sub xpto ()
if (application A) then
end if
If (application B) then
end if
End Sub
Как это сделать в dll?





Я бы использовал Assembly.GetEntryAssembly () вместо GetCallingAssembly(), как было предложено.
Этот вызов поможет определить, что фактический процесс запускает вашу библиотеку вместо того, чтобы библиотека немедленно вызывала вашу сборку.
Gets the process executable in the default application domain. In other application domains, this is the first executable that was executed by ExecuteAssembly(String).
Применительно к вашему сценарию у вас будет что-то вроде этого:
Public Sub xpto ()
' Grabs the entry assembly.
Dim entryAssembly as Assembly = Assembly.GetEntryAssembly()
' Grabs its name
Dim entryAssemblyName as AssemblyName = entryAssembly.GetName()
If (entryAssemblyName.Name == ApplicationA) Then
End If
If (entryAssemblyName.Name == ApplicationB) Then
End If
End Sub
Будьте осторожны с этим, потому что «начальная сборка» в модульных тестах будет одной и той же, хост-приложением модульного теста, независимо от того, какой проект вы тестируете.
@ Блинди Ой! это определенно правда. Я не хотел смотреть на потенциальные проблемы дизайна, которые могут возникнуть при таких потребностях (например, выяснение, кто звонит в данную библиотеку).
Искать таких оракулов - очень плохая идея. Вы упускаете из виду приложение C, которое появится через год. И модульные тесты, гарантированно, что они вам понадобятся в дождливый день, когда слишком многие из этих хаков плохо работают. Дайте методу аргумент, позволяющий ему выполнять свою работу должным образом.