【问题标题】:Is it possible to utilize OctoPack with the new PackageReference NuGet format?是否可以将 OctoPack 与新的 PackageReference NuGet 格式一起使用?
【发布时间】:2018-07-19 01:56:11
【问题描述】:

我们最近升级了我们的程序集以使用PackageReference 格式而不是packages.config 作为我们的 NuGet 依赖项。其中一个包OctoPack 在执行此操作后停止工作。有什么方法可以让OctoPack 在仍然使用PackageReference 格式的同时工作?

【问题讨论】:

    标签: msbuild nuget octopack packagereference


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      EnsureNuGetPackageBuildImports 目标可能已经存在,甚至之前。

      如果您将它添加到您的 csproj(或保留它,如果您从 packages.config 转换而来),它仍然可以工作。问题是包没有存储在“..\packages”中。

      这很容易通过将“..\packages\OctoPack.3.6.4”替换为“$(NuGetPackageRoot)\octopack\3.6.4”来解决。当然,您需要 PackageReference 到 octopack。进行恢复操作将包放入 $(NuGetPackageRoot) 就足够了。

      YMMV,但它在本地和 CI (TeamCity) 中都适用于我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-06
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-27
        • 2021-11-12
        • 2016-04-01
        相关资源
        最近更新 更多