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