通过PackageReference消费包含.targets文件的nuget软件包

时间:2019-03-21 11:29:40

标签: msbuild nuget

我有一个.NET452项目-让我称它为Consumer.csproj我想消耗nuget让我们称它为SharedTargets,其中包含一些来自msbuild的自定义目标文件(SharedTargets.targets)。

我正在使用PackageReference格式,现在(与以前相比)nuget包正在还原到共享文件夹(%userprofile%.nuget \ packages)中,我不确定是否最好通过它引用它(感觉不对)。

例如:

<PackageReference Include="SharedTargets">
  <Version>1.0</Version>
</PackageReference>
<Import 
  Project="$(USERPROFILE)\.nuget\packages\SharedTargets\1.0\SharedTargets.targets"
/>

这也仅在VS中起作用,从命令行(msbuild运行),我遇到了鸡蛋问题:

  

确认<Import>声明中的路径正确,并且   该文件存在于磁盘上。

很明显,因为我需要先恢复nuget才能使用它:)

那么问题:

  • 是否有一些更优雅的方法来解析项目文件中nuget包的路径
  • 有没有一种方法可以使msbuild成功(即在导入SharedTargets.target之前还原软件包)

1 个答案:

答案 0 :(得分:1)

您不应尝试手动导入通过NuGet分发的目标。

将.targets文件放入包内的build子文件夹中,并将其命名为SharedTargets.targets(包ID + .targets),NuGet将自动包含目标-对于packages.config项目它将在安装时修改项目文件,对于PackageReference项目,将通过修改obj\目录中隐式生成的目标文件来导入目标。