【问题标题】:NuGet local repository and package restoringNuGet 本地存储库和包还原
【发布时间】:2016-03-13 06:37:07
【问题描述】:

在我们的团队中,我们正在尝试使用多个包项目和 NuGet 团队存储库服务器构建工作流。但是为了避免在每次更改时部署包,每个开发人员在他的机器上都有自己的本地存储库。场景是:

开发人员在包和依赖项目上工作。他不会发布新版本的包,也不会在稳定发布之前将其部署到 NuGet 团队存储库(因此版本在发布之前不会更改)。

Project_A 生成 Project_A.nupkg 并在构建后事件(例如版本 1.0.0.0)中将其部署到本地存储库中。

Project_B 依赖于 Project_A.nupkg,并且由于 NuGet 包恢复内置功能而从本地存储库中提取它。

问题是,当开发人员更改 Project_A 中的某些内容并将其重新推送到本地存储库时,Project_B 没有获得此更新,因为 packages 文件夹中已经存在相同版本的包。

我试过了:

  • 在预构建事件中删除 packages 文件夹的方法,但在 package-restore msbuild 任务后将其删除,因此构建失败。
  • 将“预发布”部分添加到版本 (http://docs.nuget.org/docs/reference/versioning),但如果版本未更改,则不会从存储库更新包。

  • 从包管理器控制台手动调用Update-Package -Reinstall -IncludePrerelease,但它会提供Package 'Project_A.1.0.0-alpha' already exists in folder '...\packages'

除了在每次构建时更改 Project_A 的 AssemblyInfo.cs 中的版本之外,此问题的最佳解决方案是什么?

【问题讨论】:

    标签: nuget nuget-package nuget-package-restore


    【解决方案1】:

    我遇到了同样的问题。我通过将以下内容添加到 Project_A 的 .csproj 文件以从 nuget 缓存(nuget 包文件夹)中清除 Project_A.nupkg 来解决它:

    <Project>
      <Target Name="DeleteLocalCache" BeforeTargets="Pack">
        <RemoveDir Directories="$(NugetPackageRoot)/$(PackageId.ToLower())/1.0.0-local"/>
      </Target>
    </Project>
    

    我运行 dotnet pack 来创建 nuget 包。上述目标在打包命令 (BeforeTargets="Pack") 之前运行并清除 Project_A 的 nuget 缓存。

    我在 Mac 和 Linux 上对其进行了测试。我相信它也可以在 Windows 上运行。

    找出我们理想的 nuget 包本地开发工作流程需要付出惊人的努力,我在这里写下结果以防其他人发现它有帮助:https://www.nyckel.com/blog/local-development-and-testing-of-nuget-packages/

    【讨论】:

      【解决方案2】:

      在 BeforeClean 事件中清除包文件夹,如果您想使用较新版本的 Project_A,请始终重建您的项目。

      【讨论】:

      • 似乎在 NuGet 还原包阶段之后会触发 BeforeClean 事件,因此还原后正在清理包文件夹,因此构建失败。
      猜你喜欢
      • 1970-01-01
      • 2016-12-29
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多