是否可以使用新的project.json文件将NuGet包添加到标准的.NET 4.6类库中?如果是这样,怎么样?
答案 0 :(得分:1)
是否可以使用新的project.json文件添加NuGet包 到标准的.NET 4.6类库?
我不确定"标准"意味着,但如果你在完整的.NET运行时运行,那么没有。
加载依赖项的责任在于运行时。 CoreCLR运行时使用coreclr.dll
,而不是使用clr.dll
的完整.NET框架。
使用CoreCLR时,使用的LoaderContainer
知道project.json
文件,因此在那里搜索要加载的依赖项。关于加载依赖关系的过程在ASP.NET 5文档中的DNX Structure中进行了描述。
如果您真的想详细了解它是如何完成的,可以在GitHub上的DefaultHost.cs
解决方案中查看ApplicationHostContext.cs
和aspnet/dnx。
第1层:CLR原生主机:
此特定于您正在使用的CLR版本的图层 有两个主要职责:
启动CLR,如何实现这取决于CLR的版本。 对于Core CLR,该过程涉及加载coreclr.dll,配置和 启动运行时,并创建所有托管代码的AppDomain 将运行。
- 醇>
调用托管入口点,第2层。当入口点时 Native Host返回此进程然后将清理并关闭 CLR。即卸载app域并停止运行时。
第2层:管理入口点
这一层是用托管代码编写的第一层,它是 负责:
创建包含所需ILoader的LoaderContainer。 ILoader负责按名称加载程序集。当。。。的时候 CLR要求解决LoaderContainer将解决的程序集 使用ILoaders解析所需的程序集。
提供将加载程序集并满足的根ILoader 依赖项,来自运行本机时提供的--lib 处理。这通常是DNX包本身。
调用所提供程序的主入口点。
第3层:应用程序主机/应用程序
如果用户将其整个应用程序编译到磁盘上的程序集中 libpath然后这个层就是你的应用程序。要做到这一点,你通过 包含应用程序入口点的程序集的名称 [ProgramName]参数和第2层将直接调用它。 但是,在所有其他方案中,您将使用应用程序主机 解决应用依赖关系并运行您的应用。 Microsoft.Net.ApplicationHost是提供的应用程序主机 运行时,并负有一些责任:
在project.json中遍历依赖项并构建闭包 应用程序将使用的依赖项。依赖性行走逻辑是 在依赖关系解析文档中有更详细的描述
将ILoader添加到可以从中加载程序集的LoaderContainer 各种来源,NuGet,Roslyn等
调用其名称为下一个的程序集的入口点 本机过程的参数