本文組織有點亂,先說結論吧: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,而是工程根目錄,這一點值得注意。