Исключение Null Reference с помощью System.Reflection.Assembly
Я разработал библиотеку для внутренней электронной почты. Когда я использую эту библиотеку из другого проекта (добавив ссылку).
Он дает NullReferenceException
в следующей строке.
System.Reflection.Assembly.GetEntryAssembly().GetName().Name
Любая идея, почему Assembly имеет значение null?
Ответы
Ответ 1
проблема решается ребятами,
Я использую
Assembly.GetAssembly(ex.TargetSite.DeclaringType.UnderlyingSystemType).GetName().Name
чтобы получить имя EntryAssemblyName.
В этом случае у меня уже есть параметр, который принимает Exception 'ex', поэтому я решил его, используя это.
Многие благодарные парни, особенно @Aliostad
Приветствия
Ответ 2
Это особенно важно в службах Windows, где они загружаются неуправляемой средой выполнения.
Использование:
Process.GetCurrentProcess().MainModule.FileName
Чтобы получить неуправляемый файл точки входа.
Update
Кажется, вы это ищете:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Ответ 3
Ответы на вопросы OP и @Neeraj: иногда также может быть полезно получить корень вашей сборки с помощью Assembly.GetExecutingAssembly().Location
(например, когда бегунок тестирования Resharper усложняет вашу жизнь при использовании GetEntryAssembly()
)
string rootDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string someFile = Path.Combine(
rootDir ?? throw new InvalidOperationException(),
"Foo",
"Bar.txt");