<TargetFramework> 和 <RuntimeFrameworkVersion> 有什麼區別?
我在文件中有以下程式碼
csproj:<TargetFramework>netcoreapp1.0</TargetFramework>在 NuGet 包管理器中,它說我有Microsoft.NETCore.App 版本 1.0.5
現在假設我在同一個
csproj文件中有以下程式碼:<TargetFramework>netcoreapp1.0</TargetFramework> <RuntimeFrameworkVersion>1.1.4</RuntimeFrameworkVersion>NuGet 包管理器現在會說我有Microsoft.NETCore.App 版本 1.1.4
我實際上是在嘗試使用 .NETCore 2.0 之前的最新框架(轉換時出現一些 EF 問題),即 .NETCore 1.1.4,但其中的多個框架屬性
csproj讓我不確定要使用哪個標籤。我找不到任何可以清楚地區分兩者之間差異的資源。
NuGet使用
TargetFramework它來解決依賴關係並確定要用於編譯和建構應用程序的資產。(在幕後,更多的屬性如TargetFrameworkMoniker和TargetFrameworkVersion開始發揮作用,但 SDK 將其抽象為更簡單TargetFramework的框架,以供其了解)。特定於
RuntimeFrameworkVersion.NET Core /netcoreapp. SDK 將為.NET Core < 2.0 的設置或使用它知道的最新版本注入Microsoft.NETCore.App對版本的依賴。RuntimeFrameworkVersion然後將解析的版本寫入runtimeconfig.json文件,供 .NET Core 主機框架解析器解析要載入的共享框架的版本(例如 => .NET Core 1.1.4 執行時)。您能夠使用的原因
1.1.*是netcoreapp1.0因為 NuGet 包實際上包含建構 .NET Core 1.0.* 應用程序所需的資產。但是,工具不知道這一點,因此您將獲得一個 .NET Core 1.0 應用程序,但它將由 1.1 框架載入,因為這就是runtimeconfig.json文件中的內容。重要的區別是:
它只對
Microsoft.NETCore.App使用哪個版本的獨立執行檔很重要。
- 當執行一個獨立的發佈時,這個包將拉入具有所需版本的完整框架(例如
dotnet publish -r win7-x64)- 當您執行為其建構的應用程序
1.0.3但已1.0.5安裝執行時時,1.0.5將自動使用執行時。- 如果您未設置
RuntimeFrameworkVersion並且發布了了解 .NET Core 較新更新檔版本的 SDK 的新版本,它將自動使用最新版本。如果您明確設置版本,您可能無法在不編輯項目文件的情況下保持最新。這
RuntimeFrameworkVersion也是應用程序將載入的最小執行時間 - 如果您將其設置為1.0.4並嘗試在僅已安裝的機器上執行,除非您編輯文件1.0.3,否則應用程序將不會啟動。runtimeconfig.json
RuntimeFrameworkVersion可以設置為浮動版本,這在針對預覽版本或每日建構時很有用,例如2.1.0-preview1-*將解析為preview1配置的 NuGet 源上可用的最新版本。除此之外,使用更高版本的 建構只有幾個原因
Microsoft.NETCore.App,例如DiaSymReader組件的建構錯誤修復。在 .NET Core 2.0 中,版本
RuntimeFrameworkVersion將始終2.0.0用於“可移植應用程序”(非自包含),因為框架的實現不再由依賴項提供,Microsoft.NETCore.App並且此 NuGet 包僅用於提供參考程序集進行編譯.