Перечисление служб времени выполнения в консольном приложении ASP.NET5

Для собственного обучения я экспериментирую с консольным приложением DNX в Visual Studio 2015 и пытаюсь реализовать пример приложения, показанный в этой статье MSDN Дэниела Рота: https://msdn.microsoft.com/en-us/magazine/dn913182.aspx В разделе: Кроссплатформенное консольное приложение .Net

В этом примере автор выводит список служб, доступных в среде выполнения, путем перечисления свойства Service в экземпляре IServiceManifest, который внедряется в класс Program через конструктор. Чтобы предоставить приложению доступ к этому интерфейсу, автор определяет ANI (нейтральный интерфейс сборки), поскольку определение IServiceManifest находится внутри самого DNX.

Этот пример был написан некоторое время назад и:

1) IServiceManifest больше не существует. Я нашел IRuntimeServices в Microsoft.DNX.Runtime.Abstractions, который имеет то же свойство Services, поэтому я предполагаю, что он был просто переименован.

2) Что еще более важно, нейтральные интерфейсы сборки были удалены в более позднем обновлении, поэтому я не уверен, как получить доступ к интерфейсу IRuntimeServices, чтобы внедрить его в конструктор программы.

Я попытался добавить зависимость в project.json к Microsoft.DNX.Runtime.Abstractions, но восстановление пакета завершилось неудачей. Я предполагаю, что этот пакет недоступен в общедоступном канале nuget, поскольку он является частью самого DNX.

Есть ли способ создать такое приложение сейчас, когда ANI отброшены?

Заранее спасибо.


person John    schedule 09.08.2015    source источник
comment
Как это относится к ASP.NET 5, которая является веб-платформой?   -  person mbudnik    schedule 09.08.2015
comment
Я полагаю, что этот конкретный вопрос больше относится к DNX, чем к другим частям ASP.NET 5, но до недавнего времени консольные приложения DNX назывались консольными приложениями ASP.NET 5 в Visual Studio (и это имя используется в статье, на которую я ссылаюсь). Возможно, название «Консольное приложение DNX» было бы более понятным?   -  person John    schedule 10.08.2015


Ответы (2)


Microsoft.Framework.Runtime.Abstractions был переименован в Microsoft.Dnx.Runtime.Abstractions в бета-версии 7. См. это объявление.

  • Если вы используете DNX beta6 или более раннюю версию, добавьте ссылку на Microsoft.Framework.Runtime.Abstractions.
  • Если вы используете DNX beta7, добавьте ссылку на Micrsoft.Dnx.Runtime.Abstractions и добавьте канал разработки (https://www.myget.org/F/aspnetvnext/api/v2) в исходники пакетов. Тогда восстановление должно работать.

Получив пакет абстракций времени выполнения, вы сможете получить доступ к IRuntimeEnvironment

person Victor Hurdugaci    schedule 09.08.2015
comment
Большое спасибо Виктор. В версии DNX, которая у меня есть (beta6), интерфейс по-прежнему IServiceManifest, поэтому я смог внедрить его после ссылки на пакет Microsoft.Framework.Runtime.Abstractions в project.json. - person John; 10.08.2015

Теперь доступ к службам времени выполнения в консольном приложении можно получить через PlatformServices и CompilationServices.

Чтобы добраться до IApplicationEnvironment, IRuntimeEnvironment, IAssemblyLoaderContainer, IAssemblyLoadContextAccessor, ILibraryManager, используйте статический объект Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.

Чтобы добраться до ILibraryExporter, ICompilerOptionsProvider использует статический объект Microsoft.Extensions.CompilationAbstractions.CompilationServices.Default.

источник

person Stas Boyarincev    schedule 03.12.2015