在csproj类库中使用project.json

时间:2015-11-19 09:34:34

标签: .net nuget class-library .net-4.6 project.json

是否可以使用新的project.json文件将NuGet包添加到标准的.NET 4.6类库中?如果是这样,怎么样?

1 个答案:

答案 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.csaspnet/dnx

  

第1层:CLR原生主机:

     

此特定于您正在使用的CLR版本的图层   有两个主要职责:

     
      
  1. 启动CLR,如何实现这取决于CLR的版本。   对于Core CLR,该过程涉及加载coreclr.dll,配置和   启动运行时,并创建所有托管代码的AppDomain   将运行。

  2.   
  3. 调用托管入口点,第2层。当入口点时   Native Host返回此进程然后将清理并关闭   CLR。即卸载app域并停止运行时。

  4.         

    第2层:管理入口点

         

    这一层是用托管代码编写的第一层,它是   负责:

         
        
    • 创建包含所需ILoader的LoaderContainer。   ILoader负责按名称加载程序集。当。。。的时候   CLR要求解决LoaderContainer将解决的程序集   使用ILoaders解析所需的程序集。

    •   
    • 提供将加载程序集并满足的根ILoader   依赖项,来自运行本机时提供的--lib   处理。这通常是DNX包本身。

    •   
    • 调用所提供程序的主入口点。

    •   
         

    第3层:应用程序主机/应用程序

         

    如果用户将其整个应用程序编译到磁盘上的程序集中   libpath然后这个层就是你的应用程序。要做到这一点,你通过   包含应用程序入口点的程序集的名称   [ProgramName]参数和第2层将直接调用它。   但是,在所有其他方案中,您将使用应用程序主机   解决应用依赖关系并运行您的应用。   Microsoft.Net.ApplicationHost是提供的应用程序主机   运行时,并负有一些责任:

         
        
    • 在project.json中遍历依赖项并构建闭包   应用程序将使用的依赖项。依赖性行走逻辑是   在依赖关系解析文档中有更详细的描述

    •   
    • 将ILoader添加到可以从中加载程序集的LoaderContainer   各种来源,NuGet,Roslyn等

    •   
    • 调用其名称为下一个的程序集的入口点   本机过程的参数

    •