Msbuild 是否可以将OctoPack与新的PackageReference NuGet格式一起使用?

Msbuild 是否可以将OctoPack与新的PackageReference NuGet格式一起使用?,msbuild,nuget,octopack,packagereference,Msbuild,Nuget,Octopack,Packagereference,我们最近升级了程序集,以使用PackageReference格式,而不是packages.config作为我们的NuGet依赖项。其中一个软件包,OctoPack,在执行此操作后停止工作。在仍然使用PackageReference格式的情况下,是否有办法让OctoPack工作?是的,但您必须使用Octo.exe pack(与ASP.NET核心应用程序的过程相同)是的。最新的Nuget版本将在obj/xxx.csproj.Nuget.g.targets文件中自动生成MSBuild任务的导入 如果没

我们最近升级了程序集,以使用
PackageReference
格式,而不是
packages.config
作为我们的NuGet依赖项。其中一个软件包,
OctoPack
,在执行此操作后停止工作。在仍然使用
PackageReference
格式的情况下,是否有办法让
OctoPack
工作?

是的,但您必须使用
Octo.exe pack
(与ASP.NET核心应用程序的过程相同)

是的。最新的Nuget版本将在obj/xxx.csproj.Nuget.g.targets文件中自动生成MSBuild任务的导入

如果没有

当使用packages.config时,Nuget会将类似的内容添加到您的csproj中

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
  <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\OctoPack.3.6.4\build\OctoPack.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\OctoPack.3.6.4\build\OctoPack.targets'))" />

此项目引用此计算机上缺少的NuGet包。启用NuGet软件包还原以下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105. 缺少的文件是{0}。


EnsureRenugetPackageBuildImports目标很可能已经存在,甚至更早

如果你把它添加到你的csproj中(或者保留它,如果你从packages.config转换过来的话),它仍然可以工作。问题是包未存储在“.\packages”中

通过将“.\packages\OctoPack.3.6.4”替换为“$(NuGetPackageRoot)\OctoPack\3.6.4”,可以轻松解决此问题。当然,您需要使用PackageReference到octopack。将包放入$(NuGetPackageRoot)中进行恢复操作就足够了

YMMV,但它对我有效,无论是在本地还是在CI(TeamCity)

<Import Project="..\packages\OctoPack.3.6.4\build\OctoPack.targets" Condition="Exists('..\packages\OctoPack.3.6.4\build\OctoPack.targets')" />