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();