通过 PackageReference 使用包含 .targets 文件的 nuget 包

Ond*_*dar 5 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"
/>
Run Code Online (Sandbox Code Playgroud)

另外,这仅适用于 VS,从命令行(msbuild)运行它,我遇到了先有鸡还是先有蛋的问题:

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

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

所以问题:

  • 是否有一些更优雅的方法来解析项目文件中 nuget 包的路径
  • 有没有办法让 msbuild 成功(即在SharedTargets.target导入之前恢复包)

Mar*_*ich 6

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

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