packagereference 裡面的資產是怎麼回事?

諾貝爾發表於2018-08-22
<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>

相關文章