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

时间:2018-07-19 01:56:11

标签: msbuild nuget octopack packagereference

我们最近将程序集升级为对我们的NuGet依赖项使用PackageReference格式,而不是packages.config格式。完成此操作后,其中一个软件包OctoPack停止工作。有什么方法可以使OctoPack在仍然使用PackageReference格式的情况下工作?

2 个答案:

答案 0 :(得分:1)

是的。最新的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'))" />

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

SecureNuGetPackageBuildImports目标可能已经存在,甚至以前。

如果将其添加到csproj中(或保留它(如果从packages.config转换而来))将仍然可以使用。问题是软件包没有存储在“ .. \ packages”中。

通过将“ .. \ packages \ OctoPack.3.6.4”替换为“ $(NuGetPackageRoot)\ octopack \ 3.6.4”,可以轻松解决此问题。当然,您需要PackageReference才能使用octopack。只需进行还原操作,即可将包放入$(NuGetPackageRoot)。

YMMV,但它在本地和CI(TeamCity)中都对我有效

答案 1 :(得分:0)

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