在 ASP.NET5 控制台应用程序中枚举运行时服务
Enumerating runtime services in an ASP.NET5 Console Application
为了我自己的学习,我在 Visual Studio 2015 年尝试使用 DNX 控制台应用程序,我正在尝试实现 Daniel Roth 的这篇 MSDN 文章中显示的示例应用程序:https://msdn.microsoft.com/en-us/magazine/dn913182.aspx 在该部分下: 跨平台 .Net 控制台应用程序
在此示例中,作者通过枚举 IServiceManifest 实例上的服务 属性 来打印运行时环境中可用的服务列表,该实例通过构造函数注入到程序 class 中。为了让应用程序访问此接口,作者定义了一个 ANI(程序集中性接口),因为 IServiceManifest 定义在 DNX 本身内部。
这个例子是前段时间写的并且:
1) IServiceManifest 好像不存在了。我确实在 Microsoft.DNX.Runtime.Abstractions 中找到了 IRuntimeServices,它具有相同的服务 属性,所以我认为它只是被重命名了。
2) 更重要的是,Assembly Neutral Interfaces 在最近的更新中被删除了,所以我不确定如何访问 IRuntimeServices 接口以便将它注入 Program 构造函数。
我尝试在 project.json 中添加依赖项到 Microsoft.DNX.Runtime.Abstractions,但包恢复失败。我假设这个包在 public nuget 提要上不可用,因为它是 DNX 本身的一部分。
现在 ANI 已经被删除,有没有办法创建这种应用程序?
提前致谢。
Microsoft.Framework.Runtime.Abstractions
在 beta7 中已重命名为 Microsoft.Dnx.Runtime.Abstractions
。请参阅 this 公告。
- 如果您使用的是 DNX beta6 或更早版本,请添加对
Microsoft.Framework.Runtime.Abstractions
的引用。
- 如果您使用的是 DNX beta7,请添加对
Micrsoft.Dnx.Runtime.Abstractions
的引用并将开发源 (https://www.myget.org/F/aspnetvnext/api/v2) 添加到您的包源中。恢复应该工作。
获得运行时抽象包后,您将能够访问 IRuntimeEnvironment
现在,可以通过 PlatformServices 和 CompilationServices 获取控制台应用程序中对运行时服务的访问权限。
获取 IApplicationEnvironment、IRuntimeEnvironment、IAssemblyLoaderContainer、IAssemblyLoadContextAccessor、ILibraryManager
使用 Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default 静态对象。
要访问 ILibraryExporter,ICompilerOptionsProvider 使用 Microsoft.Extensions.CompilationAbstractions.CompilationServices.Default 静态对象。
为了我自己的学习,我在 Visual Studio 2015 年尝试使用 DNX 控制台应用程序,我正在尝试实现 Daniel Roth 的这篇 MSDN 文章中显示的示例应用程序:https://msdn.microsoft.com/en-us/magazine/dn913182.aspx 在该部分下: 跨平台 .Net 控制台应用程序
在此示例中,作者通过枚举 IServiceManifest 实例上的服务 属性 来打印运行时环境中可用的服务列表,该实例通过构造函数注入到程序 class 中。为了让应用程序访问此接口,作者定义了一个 ANI(程序集中性接口),因为 IServiceManifest 定义在 DNX 本身内部。
这个例子是前段时间写的并且:
1) IServiceManifest 好像不存在了。我确实在 Microsoft.DNX.Runtime.Abstractions 中找到了 IRuntimeServices,它具有相同的服务 属性,所以我认为它只是被重命名了。
2) 更重要的是,Assembly Neutral Interfaces 在最近的更新中被删除了,所以我不确定如何访问 IRuntimeServices 接口以便将它注入 Program 构造函数。
我尝试在 project.json 中添加依赖项到 Microsoft.DNX.Runtime.Abstractions,但包恢复失败。我假设这个包在 public nuget 提要上不可用,因为它是 DNX 本身的一部分。
现在 ANI 已经被删除,有没有办法创建这种应用程序?
提前致谢。
Microsoft.Framework.Runtime.Abstractions
在 beta7 中已重命名为 Microsoft.Dnx.Runtime.Abstractions
。请参阅 this 公告。
- 如果您使用的是 DNX beta6 或更早版本,请添加对
Microsoft.Framework.Runtime.Abstractions
的引用。 - 如果您使用的是 DNX beta7,请添加对
Micrsoft.Dnx.Runtime.Abstractions
的引用并将开发源 (https://www.myget.org/F/aspnetvnext/api/v2) 添加到您的包源中。恢复应该工作。
获得运行时抽象包后,您将能够访问 IRuntimeEnvironment
现在,可以通过 PlatformServices 和 CompilationServices 获取控制台应用程序中对运行时服务的访问权限。
获取 IApplicationEnvironment、IRuntimeEnvironment、IAssemblyLoaderContainer、IAssemblyLoadContextAccessor、ILibraryManager 使用 Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default 静态对象。
要访问 ILibraryExporter,ICompilerOptionsProvider 使用 Microsoft.Extensions.CompilationAbstractions.CompilationServices.Default 静态对象。