【问题标题】:Dealing with pending deletes when updating nuget packages in TFS在 TFS 中更新 nuget 包时处理挂起的删除
【发布时间】:2013-08-31 18:47:37
【问题描述】:

我们有一个内部开发的 Nuget 包,并在任何项目中添加了许多 MVC 相关资产 - Views\Home 文件夹中的 Index.cshtml 视图、HomeController 和 @ 987654325@ 文件夹和一个 Content 文件夹,其中包含一些静态文件(以及其他文件)。

每次我们创建新版本的包并将其拉入 TFS 源代码控制下的项目时,都会首先卸载当前版本的包(标准 Nuget 行为)。这会导致所有资产都被置于源代码控制中的挂起删除状态。每当一个文件夹中的所有文件被清空时,该文件夹也会进入待删除状态。

当安装新版本的 Nuget 包时,包管理器会抛出错误,因为它尝试复制的资产已设置为删除,或者在文件夹的情况下父级设置为删除。

有没有办法处理这种情况,要么在安装新包时强制 TFS 有效地取消删除资产,要么在卸载时不首先删除它们?

【问题讨论】:

  • 我们确实有类似的问题。它似乎与本地工作区和更新包中的一定数量的文件有关,因为我们的一个包只包含两个文件,并且它们被我们的 TFS 正确标记为“已更改”。那么您也在使用本地工作区吗?您的包中包含多少个文件?
  • 我也在使用本地工作空间。包中有 5 个文件、1 个控制器、1 个视图和 3 个其他资产。每个进入的文件夹中没有任何其他文件,因此当软件包被卸载时,文件所在的文件夹被标记为待删除。如果安装后更改了作为软件包一部分的文件,Nuget 似乎足够聪明地忽略它(或者至少让您可以选择忽略它)而不删除该文件。这些文件在 TFS 中被标记为已修改。
  • 所以我认为您还没有偶然发现解决方案。真可惜。 ;) 我实际上求助于将我的工作区转换回服务器工作区,并且不再有这些问题。可能是一个实际的 NuGet 错误? (请参阅this official issue,尽管它已关闭一段时间)。
  • 不,还没有解决方案。为有关工作空间的提醒干杯。这可能是一种解决方法。如果可以避免的话,我真的不想改回服务器工作区。看起来这个问题仍然存在,但没有解决方案。啊,快乐...
  • 刚刚发现您的问题是试图为完全相同的问题找到解决方案。有关于这个话题的消息吗?

标签: asp.net-mvc tfs nuget


【解决方案1】:

虽然有一些钩子和方法可以处理这个问题(挂钩到IVsPackageInstallerEvents 或通过init/install/uninstall.ps1 脚本管理它,但使用 Nuget 包还原可能更容易。

建议的做法是不要将“包”文件夹签入源代码管理,而是在构建期间使用 NuGet 包还原来还原包。更多信息here

【讨论】:

  • 同意。我总是使用包还原。这里的问题不在于包文件夹的内容。软件包安装到目标项目中的是特定文件(不是二进制文件,而是实际代码文件)。必须将这些资产签入 TFS,因为我们有将 Web 项目文件安装到目标服务器上的部署构建,如果将这些文件从 TFS 中排除,则会失败。
  • 你有没有找到解决这个问题的方法?我们内部开发的 NuGet 包和该包所依赖的非托管 DLL 也存在同样的问题。
  • 我已经看到了这个问题,比如 javascript。这些东西最终不会出现在包文件夹中
【解决方案2】:

我相信这已在最新的 TFS/Visual Studio/Nuget 组合中得到修复。

所以坚持下去,有希望。

但是,对于我们这些仍然停留在较旧版本的人来说,我发现手动从 packages.config 中删除包条目最简单,然后使用 nuget 包管理器安装(而不是更新)最新版本的包,副作用最小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-19
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多