Assembly.GetExecutingAssembly() доступен в .NET Core?
Необходимо внедрить json файл в качестве источника для тестирования в моем приложении .NET Core. Автор этого сообщения http://codeopinion.com/asp-net-core-embedded-resource/ предоставил пример кода, который включал использование var assembly = Assembly.GetExecutingAssembly();
Однако, когда я пытаюсь это сделать, я получаю ошибку: Cannot resolve symbol ‘GetExecutingAssembly’ and ‘Assembly’ does not contain a definition for ‘GetExecuringAssembly’
Ответы
Ответ 1
Если вы планируете использовать .NET Standard 1.5 или выше, вы можете вызвать любое из следующего:
System.Reflection.Assembly.GetExecutingAssembly();
System.Reflection.Assembly.GetEntryAssembly();
System.Reflection.Assembly.GetCallingAssembly();
Если таргетинг на более ранние версии .NET Standard, то метод typeof(SomeClass).GetTypeInfo().Assembly
является единственным способом.
Ответ 2
В .NET Standard до версии 1.5
нет "статического" класса Assembly
. Вместо этого вы должны сделать что-то вроде:
typeof(<AClassHere>).GetTypeInfo().Assembly
Где <AClassHere>
следует заменить именем класса/типа в сборке, которую вы хотите загрузить.
Ответ 3
Нет, он недоступен в .NET Core 1.0/1.1.
Однако, если я правильно помню, он вернется в .NET Core 2.0 и netstandard2.0
, который будет выпущен позже год, который будет иметь гораздо большую поверхность API и повышенную совместимость с библиотеками, написанными против .NET >= 4.5, что упростит их перенос в .NETStandard 2.0/2.1.
Но многие реализации API будут зависимыми от платформы. Значит, вы сможете называть SomeAPI.GetSomething()
всюду, но если он запущен на .NET Core, он может выбросить PlatformNotSupportedException
.
Но большинство API-интерфейсов по сбору и обнаружению сборки должны быть снова в .NET Core/Standard 2.0. Материал вокруг AppDomain
по-прежнему будет отсутствовать, поскольку в .NET Core нет приложений AppDomains, и процессы должны использоваться для изоляции.
Ответ 4
Получает текущий рабочий каталог приложения. Полезно для отладки и модульных тестов.
Directory.GetCurrentDirectory();