Asp.net-Core

.NET Core - 解決方案、框架、導入、執行時

  • June 2, 2016

我正在開始修改一組框架庫以使用 .NET Core。以為我會等待 RC2 並熱衷於陷入困境。

我藉此機會近距離接觸建構系統、配置、從頭開始編寫所有程式碼,以獲得更深入的理解,並且沒有我不想要/不需要的不必要的包袱。然而,缺乏文件使得這變得相當困難..所以我想在這裡問一下,毫無疑問聰明的 .NET Core 人藏在哪裡;)

我知道這個問題很長,並且有很多子問題。但我覺得可以通過一個文件連結或知情人士的幾行簡潔的文字來回答它。感謝您對我的包容,我希望這可能成為其他人的有用答案資源,試圖了解 .NET Core 的好方法。


首先,global.json。我希望在同一個“解決方案”中有多個項目和組件。通過另一個 SO 問題,我發現了這個隱藏連結:http ://dotnet.github.io/docs/project-model/global-json-reference.html - 但似乎沒有用於從頭開始設置或使用它的 VS 工具.

1) global.json 問題

A)這些文件指的是什麼建構系統? dotnet build? (對此的幫助說它只是建構一個項目-如果它確實是“解決方案”-如果仍然是名稱-它是否僅dotnet build在所有子文件夾中執行?)。

B) 周圍的許多範例都有一個"sdk"屬性 - 但 EF Core 沒有它,並且新的“單句樣式”文件沒有引用它。 ASP.NET Core 的官方 RC2 遷移指南有它 是否仍然存在?如果是這樣,為什麼需要它?它有什麼用?它有哪些選擇?


接下來是project.json框架。我想了解這裡的框架選項。有清單嗎?官方指導? dotnet new用途netcoreapp1.0“官方文件”使用了一個例子,dnxcore50上個月的 GH 討論也提出了netcore1.0作為框架(與應用程序)的可能性的問題。

此外,imports. 我對命名感到非常困惑 - 文件談到這是該項目兼容的其他框架的列表..

2)project.json 框架問題——

A) 我在哪裡可以找到關於框架選項的最新或維護列表或一組建議?

B)如果我對目的的理解import是正確的,為什麼要這樣命名?如果不是,它究竟導入了什麼?

C) 為什麼import每個屬性都有一個framework屬性?如果是為了表明整個項目與另一個框架兼容,那似乎最好放在頂層project.json,不是嗎?

D) 我應該如何決定import應該使用哪些選項? dotnet new剛剛dnxcore50——要滿足哪些包? 這傢伙建議dotnet5.6dnxcore50portable-net45+win8


最後,我正在建構類庫、測試項目、控制台工具。所以..

3) 參考資料和軟體包

A)我總是想要Microsoft.NETCore.App按照dotnet new嗎?還有其他基線選項嗎?選擇指導?一個列表?

B)文件沒有提及有關type選項(buildplatform)的任何內容。有沒有關於這些的指導?

C) 我的一些項目將使用 ASP.NET。在哪裡找到正確的參考包的最佳位置?NuGet 上似乎有一百萬個版本和包。 本教程只討論引用Microsoft.AspNetCore.Server.Kestrel- 以及 refs 唯一的 ASP.NETty 內容是Microsoft.AspNetCore.Hosting. 這是否意味著一個包是 ASP.NET 的大部分內容?

你有很多問題。它沒有單一的文件,因為問題不是那麼簡單;)

全域.json

  • global.json 建構系統:global.json(如 project.json)不指定建構系統(例如 msbuild csproj 文件除外)。目前,僅dotnet build可用(在 VS 中使用時由 msbuild xproj 代理)。這將發生變化,msbuild因為完整的工具處於預覽/測試階段,不會在 6 月底發布。它遍歷所有子文件夾並建構內容。它也是查找本地項目引用的根節點。
  • global.json sdk:即用於建構的 sdk。新的cli也支持多個sdk,我覺得還是用這個來做選擇的。

項目.json

  • project.json 框架列表:我建議您閱讀平台標准文件,在那裡您可以找到目前框架名稱的列表。本文件還將解決您(可能)遇到的許多其他問題。NuGet 項目文件中有一個完整的列表,但該列表再次被棄用,也沒有那麼有用。您的範例netcore用於 UWP(其執行時也稱為 .NET Core),而跨平台.NET Core使用netcoreapp在 NuGet 文件中完全缺失。
  • project.json 導入:你來這裡的目的是錯誤的。在 project.json 中,您指定建構庫的實現的目標框架(例如netstandard1.6net451)。該import語句用於您為目標框架指定的依賴項,基本上說:如果netstandard1.6引用的庫中不存在 TFM(例如)(因為 NuGet 是前一段時間建構的),我也接受這些導入一次(例如,不推薦dotnet5.6要麼dnxcore50)。目前,這是一個打破 NuGet 並允許使用尚未移動到新 TFM 的庫的實用程序。它沒有說明您的項目,而是您接受使用哪些版本的依賴項。這需要為每個目標框架單獨規範,因為每個目標框架對 NuGet 庫實現的接受可能會有所不同。
  • project.json 導入用法:好吧,使用您需要的並刪除所有您不需要的。當您將尚未遷移到新 TFM 的 NuGet 引用時,您將收到錯誤消息。dnxcore並且dotnet是 .NET Core 項目的節省賭注,因為它們在目前名稱之前已經使用netstandard並且netcoreapp已經被創造出來。只是不要那麼大膽地將net461基於 /mscorlib 的 NuGet 實現添加到基於netstandard/System.Runtime 的目標框架中。這是行不通的,是一個常見的錯誤。

依賴關係

  • dotnet new 預設模板:是的,對於 ASP.NET 和控制台應用程序,這始終是正確的選擇。但是,這只是一個簡單的控制台應用程序(Web 應用程序也是控制台應用程序)。使用 Visual Studio 在 Linux 下創建新的 ASP.NET Core 項目或 yeoman 進行高級模板。dotnet new不是一個成熟的腳手架系統。新模板使用netcoreapp目標框架和Microsoft.NETCore.App元包來導入基本上所有可用的基類庫。如果要創建庫,請切換到netstandard目標框架並依賴NETStandard.Library. 您仍然可以添加其他依賴項。對於 ASP.NET 核心,沒有可用的直接元包。指導到此結束。有一個稱為修剪的過程,您可以在其中刪除這些元包並添加具體的依賴項。但目前還沒有工具。
  • project.json 建構/平台依賴:build依賴本質上是工具,在建構過程中不會發布。當你知道npm你知道這個方案為devDependencies. platform依賴項本質上是一個依賴項,它不與您的應用程序一起部署,而是作為 .NET Core SDK 的共享基礎安裝的一部分。您可以在術語“攜帶式應用程序”(即)和“獨立應用程序”(即沒有)下找到指導。platform
  • project.json 元包/傳遞依賴:.NET Core 和 project.json 引入了元包的概念。Microsoft.NETCore.App本質上是 .NET Core 命令行應用程序和NETStandard.Library類庫的基線依賴項。所有這些包都可以有自己的程式碼和其他包的傳遞依賴項。這些你也可以使用。舉個例子,Microsoft.NETCore.Apppackage 指的是NETStandard.Librarywhich 又指System.Collections.Generic. 因此,在您引用的應用程序中,Microsoft.NETCore.App您可以使用通用集合。對於ASP.NET Core,情況就不同了,因為按需付費的理念對性能非常關鍵。對於生產應用程序,您必須了解您添加的內容。作為初學者,您必須使用 VS 或 yeoman 之類的腳手架系統。這Microsoft.AspNetCore.Server.Kestrel(例如純文字)或Microsoft.AspNetCore.Mvc(對於 web api)可傳遞地包括大多數其他關鍵的 ASP.NET Core 依賴項。

免責聲明:上面的大多數主題都與被認為是“預覽”的工具有關。“預覽版”的意思是“測試版”。即將發生重大變化(例如將建構系統從 project.json 切換回 msbuild,或再次改進 .NET 標準)。

我希望這能回答你的大部分問題。我認為在一個問題中回答所有問題是一項挑戰;)。

引用自:https://stackoverflow.com/questions/37585898