获取NuGet包的位置

时间:2018-03-05 18:35:05

标签: nuget nuget-package

在我的公司,我们有一些自制工具,在构建其他项目时用于构建过程。 我需要在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,但我找不到有关这些文件的有用信息。

1 个答案:

答案 0 :(得分:2)

在目标内,您可以使用此功能根据项目创建属性:

<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>