首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在nuget包中使用PackageReference的道具和目标

基础概念

PackageReference 是 .NET Core 和 .NET 5/6/7+ 项目中用于管理 NuGet 包依赖项的方式。与旧的 packages.config 文件不同,PackageReference 直接集成在项目文件(如 .csproj)中,提供了更细粒度的控制和更好的性能。

优势

  1. 细粒度控制:可以在项目级别或文件级别指定依赖项版本。
  2. 增量构建:只下载和更新发生变化的包,提高构建速度。
  3. 依赖解析:自动解析并下载所有间接依赖项。
  4. 离线模式:支持离线模式,减少对网络的依赖。

类型

  • 项目级别:在 .csproj 文件的 <ItemGroup> 标签中定义。
  • 文件级别:在特定文件中定义,适用于某些特定的库或组件。

应用场景

  • 大型项目:适用于大型项目,可以更好地管理复杂的依赖关系。
  • 持续集成/持续部署(CI/CD):在 CI/CD 流程中,可以更高效地处理依赖项。
  • 多项目解决方案:在多项目解决方案中,可以统一管理依赖项。

示例代码

以下是一个在 .csproj 文件中使用 PackageReference 的示例:

代码语言:txt
复制
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.0.0" />
  </ItemGroup>

</Project>

遇到的问题及解决方法

问题:包版本冲突

原因:不同的包可能依赖于同一包的不同版本。

解决方法

  1. 使用 Version 属性:明确指定包的版本。
  2. 使用 ExcludeAssetsIncludeAssets 属性:排除或包含特定的资产。
  3. 使用 PrivateAssets 属性:将某些包标记为私有,不对外暴露。
代码语言:txt
复制
<ItemGroup>
  <PackageReference Include="SomePackage" Version="1.0.0" ExcludeAssets="all" PrivateAssets="all" />
</ItemGroup>

问题:包下载失败

原因:网络问题或包源配置错误。

解决方法

  1. 检查网络连接:确保网络连接正常。
  2. 配置包源:在 NuGet.Config 文件中配置正确的包源。
代码语言:txt
复制
<packageSources>
  <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>

参考链接

通过以上信息,您可以更好地理解和使用 PackageReference 来管理 NuGet 包依赖项。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

项目文件 MSBuild NuGet 编写扩展编译时候,正确使用 props 文件 targets 文件

工具 - walterlv 如何创建一个基于命令行工具跨平台 NuGet 工具 - walterlv 当我们创建 NuGet 包含 .props .targets 文件时候,我们相当于项目文件...或者扩展编译流程都将可以访问到你设置属性值 如果你是使用属性,或者按条件设置属性,那么请写到 .targets 里面 因为这个时候多数属性已经初始化完毕,你可以使用到属性值了 如果你写是编译目标...(Target),那么请写到 .targets 里面 编译目标是扩展编译,通常都是使用属性 也会有一些产生属性,但那都是需要在编译期间产生属性,其他依赖需要使用 DependsOn 等属性来获取...-- 当生成 WPF 临时项目时,不会自动 Import NuGet props targets 文件,这使得临时项目中你现在看到整个文件都不会参与编译。...WPF 临时项目不会 Import NuGet props targets 可能是 WPF Bug,也可能是刻意如此。

25120

自动将 NuGet 引用方式从 packages.config 升级为 PackageReference

install.ps1 脚本将失效 使用 PackageReference 后,安装写在过程 install.ps1 脚本将不再执行。...使用 content 方式指定内容资产将失效 PackageReference 使用 contentFiles 来管理内容资产,这样可以更好地多个依赖之间传递共享。...XDT 变换将失效 使用 PackageReference 后,安装写在过程 XDT 转换将不会执行,并且会忽略 .xdt 文件。 Web 应用开发中会更留意这个问题。...PackageReference 要求只能引用在某个目标框架下程序集。 如果是使用默认方式创建 NuGet ,基本上不会遇到这样问题。...packages.config 方式引用要求 csproj 文件显式指定一个依赖版本,于是无论依赖使用了哪个版本,最终都由显式指定版本来指定。

1.7K20
  • 使用Donut CachingDonut Hole CachingASP.NET MVC应用缓存页面何时使用Donut CachingDonut Caching Nuget Donut Ho

    Donut Caching是缓存除了部分内容以外整个页面的最好方式,它出现之前,我们使用“输出缓存”来缓存整个页面。...何时使用Donut Caching 假设你有一个应用程序中有像“主页”这种页面,它除了用户登录用户名以外总是给用户呈现相同或者很少变化内容。这时你可能需要缓存大部分内容。...Donut Caching Nuget 使用Donut Caching之前,你需要在Visual studio中使用Nuget安装,一般直接键入命令安装: install-package MvcDonutCaching...安装完成后,你就可以通过action或者controller上添加DonutOutputCache标签来控制缓存了,大多数OutputCache标签都可以DonutOutputCache中使用。...,它用来缓存页面一小部分。

    1.4K50

    .NET 使用 ILMerge 合并多个程序集,避免引入额外依赖

    打包成一个程序集可以避免分发程序时候带上一堆依赖而出问题。 ILMerge 可以用来将多个程序集合并成一个程序集。本文介绍使用 ILMerge 工具NuGet 工具来合并程序集其依赖。...---- 以 NuGet 形式使用 ILMerge ILMerge 提供了可供你项目使用 NuGet 。...如果你团队项目当中安装了 ILMerge NuGet ,那么无论团队其他人是否安装了 ILMerge 工具,都可以使用 ILMerge 工具。...要以 NuGet 形式来使用 ILMerge,需要首先安装 ILMerge NuGet : [NuGet Galleryilmerge](https://www.nuget.org/packages...(注意到项目文件我有额外引用一个其他 NuGet Ben.Demystifier,这是为了演示将依赖进行合并而添加 NuGet ,具体是什么都没有关系,我们只是在演示依赖合并。)

    2.3K30

    项目文件已知 NuGet 属性(使用这些属性,创建 NuGet 就可以不需要 nuspec 文件啦)

    NuGet 就可以不需要 nuspec 文件啦) - 吕毅 NuGet 相关属性也分为全局属性项属性两类。...$(Authors): 作者;建议指定成 nuget.org 上用户名,这样访客可以点击作者查看到作者信息;多个名字用分号分隔。...$(Title): 显示名称,如果没设置,则使用 $(PackageId)。 $(PackageDescription): 描述文字,如果填写了,则用户浏览时候可以看到。...-- 大致与 IncludeSymbols 相同,不过只会额外把 pdb Compile 类型文件打包到 NuGet 。...可能没有开放内部属性 Microsoft.NET.Sdk NuGet 打包主要靠NuGet.Build.Tasks.Pack.targets 文件中一个名为 PackTask 任务来完成

    2K10

    tensorflow model目标对象检测编译测试

    前段时间,谷歌开放了 TensorFlow Object Detection API 源码,并将它集成到model。...这个代码库是一个建立 TensorFlow 顶部开源框架,方便其构建、训练部署目标检测模型。设计这一系统目的是支持当前最佳模型,同时允许快速探索研究。...特别还提供了轻量化 MobileNet,这意味着它们可以轻而易举地移动设备实时使用。 花了点时间对这个模型进行调试,里面还是有不少坑,相信在编译过程中大家都会碰到这样那样问题。...另外,为了测试不同模型效果,分别对mobilenetfaster-rcnn进行了测试。故意选择了一张多场景图片来进行测试。 ? 选择moblienet效果如下所示: ?...发现moblienet精度效果一般,特别是对远距离对象检测效果非常一般。 接下来测试了下faster-rcnn效果。如下: ?

    1.1K80

    是时候将WPF控件库从.Net Framework升级到.NET Core 3.1

    2. .NET 可移植性分析 升级前,保险起见需要使用.NET 可移植性分析器分析项目目标.NET平台上可移植性。...迁移到 PackageReference NuGet 引用 引用了Nuget旧.NET Framework项目会将引用Nuget信息记录在packages.config文件,例如在示例项目中...要迁移到PackageReference,先尽可能升级引用Nuget,然后选中项目中packages.config,右键菜单中选中“将 packages.config 迁移到 PackageReference...打开Kino.Toolkit.Wpf.csproj,会发现少了些东西,但多了下面这段,这段就是经过精简Nuget引用,“管理Nuget程序页面也可以看到已安装Nuget变少了: ? ?...: VisualStudio 使用新项目格式快速打出 Nuget 6.

    4.2K10

    .net core迁移实践:项目文件csproj转换

    此处配置根据各人项目定位不同设置所需值。我们公司业务程序是跑特定运行容器下,迁移过程也是分阶段展开,最终我们采取先同时编译两个目标平台dll方案。...由以上对比可见,SDK样式csproj内容精简一大原因就是文件依赖(cs源码nuget文件)不需要在csproj明确写明。...另外针对nuget依赖文件也是如此,csproj不再维护nuget文件明细,而改为PackageReferencenuget为单位来管理依赖。...这个改变对我们转换几乎没有影响,重新添加一次nuget引用即可; 同时再说一句:net core是不支持packages.config文件管理nguet,建议大家提前就将nuget管理改为PackageReference...调整依赖nuget直接引用程序集dll 这一步对nuget有要求,需要其提供netstandard平台版本,如下图: ?

    1.3K30

    .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外依赖

    而本文介绍用来替代它们 ILRepack,使用 ILRepack 来合并程序集。 ---- 以 NuGet 形式使用 ILRepack ILRepack 提供了可供你项目使用 NuGet 。...如果你团队项目当中安装了 ILRepack NuGet ,那么无论团队其他人是否安装了 ILRepack 工具,都可以使用 ILRepack 工具。...要以 NuGet 形式来使用 ILRepack,需要首先安装 ILRepack NuGet : [NuGet GalleryILRepack](https://www.nuget.org/packages...(注意到项目文件我有额外引用一个其他 NuGet Ben.Demystifier,这是为了演示将依赖进行合并而添加 NuGet ,具体是什么都没有关系,我们只是在演示依赖合并。)...这些需要合并参数,第一个参数是主程序集,而后续其他都是待合并程序集。区别主程序集其他程序集原因是输出程序集需要有名称、版本号等等信息,而这些信息将使用主程序集中信息。

    1.6K50

    C# WPF实战项目升级了

    弹出对话框会列出顶级依赖项传递依赖项,还会询问是否将后者升级到顶级依赖项,这个项目无需做任何改变,直接点击“确定”: step3:打开Caburn.Micro.Hello.csproj,会发现少了些东西...,但多了下面这段,这段就是经过精简Nuget引用,“管理Nuget程序页面也可以看到已安装Nuget变少了: <PackageReference Include...:更新里面全选需要升级项目,点击更新 step5:升级完,运行项目,会看到有报错,这些主要是CM框架新版本变更引起,根据需求修改代码: CM4.0主要变更 -....支持WPF.NET最低版本是4.6.1,所有这些平台3.x版本仍然受支持. -. 重大变化,以下是4.0.0版本包含更改。 目标平台已更改,以支持新.NET平台版本。...屏幕视图模型生命周期 所有支持视图模型生命周期接口,如IActivateIGuardClose,现在都支持异步实现。

    95120

    发布 Rafy .NET Standard 版本 Nuget

    但是这都只是源码层面支持 NS2.0,并没有发布其正式 Nuget 。要使用这个版本开发者,不得不自己下载源码进行编译。 最近,使用 Net Core 开发者越来越多。...所以我们决定发布一个正式 Nuget ,以方便 Net Core 开发都可以方便地下载、更新 Rafy 框架进行使用。...发布后,开发者 Nuget 再搜索 Rafy 最新版本时,就已经支持 Net Standard 2.0 了: ?...项目支持多版本改造步骤 过程其实没有想到,要发布一个同时支持 Net Standard 2.0 Net Framework 4.5 版本 Nuget ,还是比较繁琐。...最终生成 Nuget 格式是这样: ? 通过上述几步,就使得 Rafy 框架支持了 Net Standard 版本了。同时,我们还把 Rafy 一些其它公共插件也都支持了多版本。

    65030

    dotnet 使用 SourceLink 将 NuGet 链接源代码到 GitHub 等仓库

    发布 CBB 作为 NuGet 时候,我期望开发者使用库进行调试,可以自动链接代码到对应打包 GitHub 上代码,可以从本地拿到对应源代码进行调试。...这个 SourceLink 是一系列库,包含了给 Azure Devops 使用给 GitHub 使用,给 Gitlab 使用等 假定我现在是使用 GitHub 作为我开源仓库,尝试我期望... dotnet 里面使用 pdb 符号文件是用来方便 VS 等工具进行调试,这个文件作用就是告诉调试工具,对应代码二进制 dll 关系 而在 NuGet nupkg 不包含 pdb 文件...,让 pdb 文件关联文件是 GitHub 仓库文件 因此使用 SourceLink 是推荐添加 snupkg ,将 snupkg 文件上传到 nuget 服务器 添加了 SourceLink...NuGet ,此时开发者安装 NuGet 使用不是二进制文件而是源代码文件,所有的源代码都能进行调试 使用方法是通过 NuGet 安装 dotnetCampus.SourceYard 库,或在 csproj

    1.5K30

    帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖 NuGet

    本文将解决 NuGet 几个坑,真正做到绝对没有的依赖传递。 ---- 我们遇到了什么问题 如果你使用了 GitVersion 这款 NuGet 来自动修改你版本号,那么你可能会遇到这个问题。...那么,除非我 B 安装完之后,明确 B csproj 文件写以下代码,否则 B 发布出去后,安装 B 项目 C 就会同时安装上 A 。...如何创建一个基于命令行工具跨平台 NuGet 工具 如何创建一个基于 MSBuild Task 跨平台 NuGet 工具 官方提供解决方案 官方非常早期 2.7 版本就提供了 developmentDependency...添加方法是 csproj 文件添加一行属性: 添加后,如果开发者安装了此 NuGet ,将自动生成以下代码... “工具 -> 选项 -> NuGet 包管理器” ,我们可以设置 NuGet 源: ? ▲ 添加调试用 NuGet 源 我们把刚刚 A 项目的输出目录填进去添加一个新源。

    96950

    阻止某个 NuGet 意外升级

    LiteDB 是一个不应该被升级 NuGet ,但是最新版本已经是 4.1.4 了,很容易被团队其他小伙伴误升级。 ?...▲ 当小伙伴打开包管理器时候,会发现版本不一致,然后就不小心升级了 思路 NuGet 使用 PackageReference 来管理所有的引用,于是我试图通过隐藏 LiteDB PackageReference...而一个典型隐藏方法便是使用 Target。不在 Target 里面的属性项是提前计算好,而 Target 里面的属性项是编译时才计算。...于是我可以将我们 BeforeTargets 指定为 CollectPackageReferences。 不过我发现在这种情况下,NuGet 包管理器界面能够发现这个项目使用了旧版本。...并且安装了新版本后,将因为多次引用不同版本而导致编译不通过。 所以,方案否决。 最终解决 既然无法阻止发现这个 NuGet ,那思路就换成无论如何更新,都无效好了。

    1.3K20

    制作跨平台 NuGet 工具时,如何将工具(exedll)所有依赖一并放入

    制作跨平台 NuGet 工具时,如何将工具(exe/dll)所有依赖一并放入 2018-07-03 13:30 NuGet 提供了工具类型支持...本文将介绍将这些依赖加入 NuGet 方法,使得复杂工具能够正常使用。...---- 问题 你可能是 创建一个基于命令行工具跨平台 NuGet 工具 时候遇到依赖问题,也可能是自己做到另外什么工具遇到。...太早了依赖文件还没有生成,太晚了 NuGet 即将打的文件早已确认,Include 了也没用。...然后,我们就可以把输出目录除了 NuGet 自然而然会帮我们打入 NuGet 所有文件都加入到 NuGet 对应目录下。 具体来说,是将下面的 Target 添加到项目文件末尾。

    2.8K30

    如何最快速地将旧 NuGet (2.x, packages.config) 升级成新 NuGet (4.x, PackageReference)

    然而迁移完才发现,这个项目竟然还依赖了大量NuGet 2.x 时代发布 NuGet ,这些并不能在 PackageReference 下好好工作。 于是,我准备将所有这些都进行升级。...自动迁移那篇文章,我提到了一些兼容性问题,最大莫过于 Install.ps1 脚本不再执行: 使用 PackageReference 后,安装写在过程 install.ps1 脚本将不再执行...install.ps1 存在是因为 packages.config 不支持 PackageReference 一些新特性(例如 NuGet 中新目录结构,例如自带 msbuild targets...所以一小部分特别依赖于 install.ps1 NuGet 是没有办法新格式中生效。...前面那一句 PackageId 指的是这个 NuGet Id。比如,例子,是 Walterlv.NuGetDemo.targets。 比如,生成 Target 节点是这样: <!

    73210

    Roslyn 读取 PackageReference 版本号内容

    写 msbuild 预编译逻辑,如果想要拿到项目安装 NuGet版本,可以通过获取 PackageReference 方法获取 获取方法是放在 Target 里面,如下面代码 <Target...获取项目所有的 PackageReference 然后使用 Warning 输出 为什么使用 Warning 输出,因为这样调试可以看到,默认 dotnet 工具输出 Waring 等级,关于 dotnet...如何在 MSBuild 中正确使用 % 来引用每一个项(Item)元数据 项目文件代码如下 <PropertyGroup...解掉 Bug,制作绝对不会传递依赖 NuGet - walterlv 那么贺喜,请试试下面的代码 <PropertyGroup...,在这里面更新了一个随意 NuGet ,将 PrivateAssets 设置为 123 值 <Target Name="LaldalllayjeaCawerequrwai" BeforeTargets

    61420

    《从零开始学ASP.NET CORE MVC》:ASP.NET Core Web 项目文件(四)

    如果您使用过以前版本ASP.NET,那么您可能对此文件非常熟悉,但此文件包含格式内容asp.ne Core 中发生了很大变化。 一个重要变化是,项目文件不包含任何文件夹或文件引用。...PackageReference:顾名思义,此元素用于包含对为您应用程序安装所有NuGet引用。项目文件,我们有以下2个NuGet。...metapackage本身是没有任何内容,它只是包含了其他依赖信息。 您可以解决方案资源管理器NuGet下找到此元数据,而NuGet又位于依赖项(Dependencies)下。...ASP.NET Core 2.1及更高版本默认项目模板,都是会使用这个。 请注意,metapackage没有版本号。 未指定版本时,SDK会指定隐式版本。....NET Core团队建议依赖SDK指定隐式版本,而不是引用上显式设置版本号。 如果目前还不完全清楚,请不要担心。 我们将在即将发布视频详细讨论metapackage隐式版本。

    1.4K30

    WPF 使用 Win2d 渲染

    好在微软开放了一些黑科技,可以 WPF 上使用 Win2d 渲染,下面就让我告诉大家如何在 WPF 上使用 2019年7月03日 这个技术还是属于黑科技,还没有正式发布,开始使用之前,有一定环境要求...你正在尝试将此程序安装到目标为“.NETFramework,Version=v4.8”项目中,但该程序不包含任何与该框架兼容程序集引用或内容文件。有关详细信息,请联系程序作者。...注意此时你新建项目使用 nuget 格式需要新 Nuget 格式,也就是不带 package.config 文件格式 1.22.0 这样就可以强制安装 准备好了环境 NuGet...如果使用是 AnyCpu 编译,那么就需要手动拷贝文件 而 Microsoft.Graphics.Canvas.dll 文件是需要手动拷贝 手动复制文件方法是打开自己本地 .nuget 源,

    99020
    领券