.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,而是工程根目錄,這一點值得注意。

相關文章
相關標籤/搜索