Nuget包更新& Package.config删除问题(TF400024)

时间:2013-03-15 20:33:43

标签: nuget tfs2012

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

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

我们看到的行为如下

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

    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,文件被标记为已删除,但它仍然存在于我的文件系统中?
  6. 下面列出的Package Manager提供的输出并不表示删除了pacakage.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.
    

    DEV。环境统计:

    • Nuget Package manager:版本2.2.40116.9051
    • Visual Studio 2012:版本11.051106.01 Update 1

    有什么我想念的吗????  谢谢

9 个答案:

答案 0 :(得分:18)

向Visual Studio Online简单检查代码就可以解决这个问题。

答案 1 :(得分:10)

这里发生的事情(可能)是你有.dll的先前版本(或相同版本)作为参考,并且在某一点(无论你做了它还是VS做了它),它删除了引用。虽然您没有在文件夹中看到引用,但TFS / GIT签入过程仍在等待“检入”您已将其删除的事实。因此,如果你没有检查过这个事实,VS认为它仍然存在,而实际上并非存在。您可以在团队资源管理器区域中验证这一点,您应该能够看到已删除的.dll(通过它指示的行)。

有点傻,但就是这样。

答案 2 :(得分:7)

我也有这个问题。

解决这个问题:

  1. 打开源代码管理资源管理器(Team Foundation)
  2. 找到'套餐'解决方案文件夹
  3. 勾选此文件夹
  4. 在此之后,您可以安装Nuget软件包而不会收到TF400024错误。

答案 3 :(得分:2)

尝试:

  • 从源代码管理中解除所有项目的绑定
  • 安装nuget包
  • 重新绑定所有项目

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

  1. 从我的电脑上删除文件。
  2. 检查更改。

答案 6 :(得分:0)

全部:

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

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

但是只要在上一次签入之前确保用于正常工作的代码即可。

谢谢

-袁Z

答案 7 :(得分:0)

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

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

然后我删除了\ packages [文件夹]并签入。

此后,我的NuGet软件包安装成功。

答案 8 :(得分:-2)

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