21

我们最近遇到了 NuGet 包更新和 TFS 源代码控制集成的问题。这给我们的团队带来了很多麻烦,让我们在完全采用 NuGet 包时犹豫不决。

问题/错误:不是更新某些项目“package.config”文件,而是将它们从文件系统中删除(并在 TFS 源代码控制中标记为已删除)我不知道为什么。

我们看到的行为如下

  1. 在 VS.NET 2012 中打开解决方案(大约 18 个项目)
  2. 通过包管理对话框启动解决方案级别包更新到最新版本,如此所述。
    • package.config 存在并且是所述选定解决方案中项目的一部分。
    • 这些 packages.configs 尚未从 TFS 中签出。
  3. 发生 NuGet 包更新,选择 package.config 将从项目中删除并在 TFS 中标记为已删除,并且引用保留在项目中更新到当前版本。
  4. 显然,这意味着当我签入解决方案和项目时,packages.config 将被删除,使未来的更新(我相信)像上面的项目一样痛苦,NuGet 不会注意到。
  5. 我注意到这一点并撤消签出并收到此错误:

    TF400024: The change on xxx\packages.config cannot be undone because a file already exists at xxx\packages.config. The file must be deleted from disk for the undo to succeed.
    
    • 有趣的是,对于 TFS,文件被标记为已删除但它仍然驻留在我的文件系统上?

下面列出的包管理器提供的输出并不表明已删除 package.config 的项目存在任何问题。

Updating 'NugetPackageAssemblyA' from version '1.5.18.0' to '1.5.23.0' in project 'CommonUnitTests'.
 Removed reference 'AssemblyAA.dll' from project 'CommonUnitTests'
 Removed reference 'AssemblyBB.dll' from project 'CommonUnitTests'
 Removed reference 'AssemblyCC.dll' from project 'CommonUnitTests'
 Removed reference 'NugetPackageAssemblyA.dll' from project 'CommonUnitTests'
 Added file 'packages.config'.
 Removed file 'packages.config'
 Successfully removed 'NugetPackageAssemblyA 1.5.18.0' from CommonUnitTests.
 Added reference 'AssemblyAA' to project 'CommonUnitTests'
 Added reference 'AssemblyBB' to project 'CommonUnitTests'
 Added reference 'AssemblyCC' to project 'CommonUnitTests'
 Added reference 'NugetPackageAssemblyA' to project 'CommonUnitTests'
 'packages.config' already exists. Skipping...
 Successfully added 'NugetPackageAssemblyA 1.5.23.0' to CommonUnitTests.

开发。环境统计:

  • Nuget 包管理器:版本 2.2.40116.9051
  • Visual Studio 2012:版本 11.051106.01 更新 1

有什么我想念的吗?

4

10 回答 10

22

将代码简单地签入到 Visual Studio Online 对我来说就是诀窍。

于 2016-04-10T16:45:06.080 回答
12

这里发生的事情(很可能)是您有 .dll 的先前版本(或相同版本)作为参考,并且在某些时候(无论您是这样做还是 VS 这样做),它删除了该引用。虽然您没有在文件夹中看到引用,但 TFS / GIT 签入过程仍在等待“签入”您已将其删除的事实。所以如果你没有检查这个事实,VS 认为它仍然存在,而实际上它不是。您可以在 Team Explorer 区域中验证这一点,您应该能够在该区域中看到已删除的 .dll(由一条穿过它的线表示)。

有点傻,但事情就是这样。

于 2017-01-09T20:57:40.350 回答
10

我也有这个问题。

要解决这个问题:

  1. 打开您的源代码管理资源管理器(Team Foundation)
  2. 找到解决方案的“包”文件夹
  3. 签入此文件夹

在此之后,您将可以安装 Nuget 包而不会收到 TF400024 错误。

于 2017-02-02T11:08:46.237 回答
2

尝试:

  • 解除所有项目与源代码控制的绑定
  • 安装nuget包
  • 再次重新绑定所有项目
于 2016-02-18T18:16:11.820 回答
2

我们的解决方法是检查整个解决方案,然后更新您的 NuGet 包。

于 2016-03-01T20:25:53.333 回答
0

当您升级包含内容文件的包时,NuGet 会卸载旧版本,删除文件并导致删除挂起的更改。我为此避免的做法是:

  1. 获得一个干净的工作空间
  2. 打开包.json
  3. 删除对旧 NuGet 包的引用
  4. 像第一次一样安装 NuGet 最新版本

这样您就不必进行肮脏的签到。

于 2021-11-13T19:31:57.023 回答
0

我有同样的问题。问题是我之前已经安装和卸载了这个包。即使我在安装后将项目签入 TFS,该包仍保留在我的 TFS 解决方案的包文件夹中。

为了解决这个问题,我打开了源代码管理资源管理器窗口并找到了包安装错误消息中标识的问题文件夹:“\packages[folder][package].nupkg 上的更改无法撤消,因为文件已经存在于 \包[文件夹][包].nupkg。必须从磁盘中删除该文件才能成功撤消。"

然后我删除了 \packages[folder] 并签入。

在此之后,我的 NuGet 包安装没有问题。

于 2018-07-10T11:03:59.057 回答
0

如果您从 TFS 签出代码,并且由于包之间的复杂关系您无法重新加载一个或多个 nuget,这就是我所做的:

  1. 删除整个解决方案文件夹。
  2. 再次检查代码。
  3. 右键单击解决方案,然后单击“还原 NuGet 包”

但只需确保在上次签入之前使用的代码可以正常工作。

于 2018-06-20T21:23:50.320 回答
-1

我有一个类似的问题,我做了以下事情:

  1. 从我的电脑中删除文件。
  2. 签入更改。
于 2018-04-19T15:10:28.690 回答
-2

在更新包之前清除 nuget 缓存可以解决问题。

于 2019-04-10T11:43:32.510 回答