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