获取NuGet包的位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取NuGet包的位置相关的知识,希望对你有一定的参考价值。

在我的公司,我们有一些自制工具,在构建其他项目时用于构建过程。我需要在VS2017 BeforeBuild和AfterBuild脚本中使用这些工具,它也必须在MS Build中工作。

这些工具作为NuGet包分发,我们的大多数项目都移植到PackageReference而不是Packages.config

我知道MyTool(版本XYZ)的当前安装位于C: Users Me .nuget packages MyTool XYZ,但是如何在我的项目文件中引用它,所以当下一个版本是释放?

我认为C: Users Me .nuget packages可以替换为$(NuGetPackageRoot),但是如何始终引用项目中安装的版本?

一些Nuget包似乎将贡献放在obj文件夹中的MyProject.csproj.nuget.g.props和MyProject.csproj.nuget.g.targets中,但是我找不到关于这些文件的有用信息。

答案

在目标内部,您可以使用它来创建基于项目的属性:

<ItemGroup>
  <PackageReference Include="Newtonsoft.Json" Version="11.0.1" />
</ItemGroup>

<Target Name="PrintStuff" AfterTargets="AfterBuild">
  <PropertyGroup>
    <NewtonsoftJsonVersion Condition="'%(PackageReference.Identity)' == 'Newtonsoft.Json'">%(PackageReference.Version)</NewtonsoftJsonVersion>
    <NewtonsoftJsonPath>$(NuGetPackageRoot)newtonsoft.json$(NewtonsoftJsonVersion)</NewtonsoftJsonPath>
  </PropertyGroup>
  <Message Importance="high" Text="JSON.NET version: $(NewtonsoftJsonVersion)" />
  <Message Importance="high" Text="JSON.NET path: $(NewtonsoftJsonPath)" />
  <Exec Command="ls" WorkingDirectory="$(NewtonsoftJsonPath)" Condition="'$(OS)' != 'Windows_NT'" />
  <Exec Command="dir" WorkingDirectory="$(NewtonsoftJsonPath)" Condition="'$(OS)' == 'Windows_NT'" />
</Target>

以上是关于获取NuGet包的位置的主要内容,如果未能解决你的问题,请参考以下文章

是否可以更改 NuGet 包的位置?

.NET 转到 NuGet 包的实现

如何获取 EntityFramework NuGet 包的 PDB 文件?

从 TFVC 源代码管理中排除 Nuget 包的步骤是啥?

删除 NuGet 包的依赖 NuGet 包

Android 使用两个不同的代码片段获取当前位置 NULL