获取NuGet包的位置

获取NuGet包的位置,nuget,nuget-package,Nuget,Nuget Package,在我的公司,我们有一些自制的工具,这些工具在构建其他项目时用于构建过程。 我需要在VS2017构建前和构建后脚本中使用这些工具,并且它也必须在MS构建中工作 这些工具以NuGet包的形式分发,我们的大多数项目都移植到PackageReference,而不是packages.config 我知道MyTool(版本X.Y.Z)的当前安装位置是C:\Users\Me\.nuget\packages\MyTool\X.Y.Z,但是我如何在项目文件中引用它,以便在下一个版本发布时也可以使用 我认为C:\U

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

这些工具以NuGet包的形式分发,我们的大多数项目都移植到PackageReference,而不是packages.config

我知道MyTool(版本X.Y.Z)的当前安装位置是C:\Users\Me\.nuget\packages\MyTool\X.Y.Z,但是我如何在项目文件中引用它,以便在下一个版本发布时也可以使用

我认为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>

%(PackageReference.Version)
$(NuGetPackageRoot)newtonsoft.json\$(NewtonsoftJsonVersion)\

非常感谢@martin ullrich我相信这就是我要找的。我一回到办公室就接受你的答案并测试它。谢谢!我已经挣扎了两天,试图找出如何解决将NuGet软件包附带的一些文件复制到项目中的问题。在VS 2017版本15.9/CLI 2.1.500+中会有一种新方法,但我会在公开发布后进行更新。@MartinUllrich你从来没有这样做过吗?