获取 NuGet 包的位置

The*_*ner 5 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 中,但我几乎找不到有关这些文件的有用信息。

Mar*_*ich 6

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

<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>
Run Code Online (Sandbox Code Playgroud)