.Net Core 项目中的包引用探索(使用VSCode)

本文组织有点乱,先说结论吧:javascript

1 在 project.json 文件中声明包引用。java

   而不是像之前那样能够直接引用 dll。json

2 使用 dotnet restore 命令后,nuget 会把声明的依赖项下载 到本机全局package缓存(若是没有的话),而不是 之前那样在解决方案根目录下建立一个package目录。缓存

这样的好处是一台机器共享同一个 package 库,省得每次都从新下载。app

3 在发布时,这些引用的dll会被放到publish目录中,进入运行环境。ui

4 若是要引用本身的私有类库,也须要经过这种方式。spa

   但nuget的官方库是不会有你的私有类库的,那么也必须先使用 package 命令打包,而后再引用。打包的方法已经有大神介绍过了,但如何引用还不得而知。也许是先手动拷贝到本地nuget缓存,而后引用,开发与发布。嗯,应该是这样。命令行

   关于这一点,在验证以后我会专门再写一篇文章来介绍。debug

 

根据这段时间来我对VSCode的理解,VSCode应该是再也不支持直接引用 dll 了,而是代以包的概念。全部的类库都是一个一个的包(package),甚至若是你要引用本身写的类库,也得发布成一个 package ,而后以 package 的方式引用。rest

在 .Net Core 工程中,有两个文件包含了这些引用依赖信息: project.json,  project.json.lock 。其中, project.json由用户编辑,而 project.json.lock这个文件达到几百K,其中的内容也不知所云,大概就是一些平台设置,公共类库什么的吧,还望之后有机会深刻研究。有人说这个  .lock 文件至关于 之前的 .proj 文件,我就不太理解,一个.proj文件主要由 工程文件清单与引用清单组成,最多也就上百行,几K大小而已,怎么能与 .lock 文件相比呢?

这个 .lock 太神秘了,很是值得研究。可是如今以赶进度为主,暂时先放过它。

主要来研究引用的问题。

在使用 dotnet new 命令产生的project.json全文以下:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": "dnxcore50"
    }
  }
}

 其中的 dependencies 节,是记录依赖关系的。

再使用 yeoman 命令生成 一个新项目,执行 yo aspnet,获得以下选项:

 其实在 yeoman 官网上有好多关于 .Net Core 的项目模板,看来看去,仍是这个  aspnet 最为好用,因此有了这一个,就不用费心安装别的模板了。

咱们选择 Web API Application ,看会生成 project.json 中引用了什么:

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
  }

 看到这个模板项目引用 了一大堆东西,这至关于 使用 Visual Studio 建立工程后默认给你引用的类库了。

到了这里,能够松一口气了:至少VSCode在引用方面,是与原来相差很少的。

可是,这些引用的类库是从哪来的?看起来并不像是基础类库,那么在发布的时候会不会做为最终制品的一部分呢?结论是:yes

这些类库并不像 Visual Studio 中使用PM命令行的 install-package 命令那样,在根目录下建立一个packages目录,这点让人困惑,这些包到底都放在哪里呢?

它们在当前用户根目录下的 .nuget 子目录下,对于Windows,那就是这里了:

全部的引用的包,都会先下载到这个位置,多是 dotnet restore 命令的结果。

 

这是发布到CentOS后的publish目录,也是程序运行的起始位置。

因此这个结论是显然的:dependencies  依赖的是非基础类库,这些依赖项最终会随着应用一块儿进入发布目录。

固然,对于一个Web应用,环境根目录并不在publish,而是工程根目录,这一点值得注意。

相关文章
相关标签/搜索