packagereference 里面的资产是怎么回事?

<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>
复制代码
posted @   诺贝尔  阅读(1178)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示