【问题标题】:Get the location of NuGet packages获取 NuGet 包的位置
【发布时间】:2018-03-06 23:51:44
【问题描述】:

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

这些工具以 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 中,但我找不到关于这些文件的有用信息。

【问题讨论】:

    标签: nuget nuget-package


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢@martin-ullrich 我敢肯定,这就是我要找的。我一回到办公室并测试它就会接受你的答案。
    • 谢谢!我已经苦苦挣扎了 2 天,试图弄清楚如何解决将 NuGet 包附带的一些文件复制到项目中的问题。
    • VS 2017 版本 15.9 / CLI 2.1.500+ 会有新的方式,但我会在公开发布后更新。
    • @MartinUllrich 你从来没有做过?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2018-05-31
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多