<PackageReference Include="Newtonsoft.Json" Version="9.0.1"> <ExcludeAssets>All</ExcludeAssets> </PackageReference>
在專案檔案裡面,這一行代表引用包,可是有三個子專案,需要說一下:
IncludeAssets
ExcludeAssets
PrivateAssets
這三個是什麼意思?
中文翻譯,Assets是資產,反正無法理解說的是什麼鬼。一開始我以為它可以定製引用庫裡面那個類,搞了好久才發覺這是一個部署選項。
可以取值:
compile 影響是否編譯到當前專案
runtime 影響到執行時可不可以使用
contentFiles
build
analyzers
native
none 無
all 全部
這個packagereference 設計得非常靈活,他並不是我理解中那個單純的包管理條目,他還設計成為編譯過程中的各個元件提供資料的條目。如果單純的程式碼包,用compile可以編譯通過,但是不能執行,會提示缺乏相關庫,如果compile和runtime一起使用,就能正常編譯和執行。其他那些顧名思意,也是為編譯過程的各種元件服務的。有一些庫並不是執行檔案需要的,而只是作為輔助開發工具使用,那麼就可以用none。
另外,專案檔案支援一個判斷條件:
Condition=”`$(TargetFramework)`==`netcoreapp2.1`”
這個判斷條件可以根據不同的專案型別來選擇引入相關包,非常好用。
專案檔案
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType Condition="`$(TargetFramework)`==`netcoreapp2.1`">Exe</OutputType> <PackageVersion>1.0.2</PackageVersion> <TargetFrameworks>netstandard2.0;netcoreapp2.1</TargetFrameworks> </PropertyGroup> </Project>