NuGet用于卸载/重新安装TFS / VS2013和NuGet 3.4.3的软件包的命令行选项

时间:2017-08-14 23:56:47

标签: visual-studio-2013 nuget tfs2013

我修改了一个解决方案并删除了一个.csproj文件,而是将.dll打包成一个NuGet包。然后我将包添加到引用.dlls的另外两个.csproj文件中。一切都很好 - 它在本地构建,但我不能在构建服务器上构建它。当我看到TFS从构建中获取的代码时,我看到两个项目的packages.config都有对NuGet包的正确引用,但当我在VS中打开解决方案时,引用旁边几乎没有黄色感叹号因为他们破坏了参考文献。我可以构建它的唯一方法是打开NuGet CMI并执行Uninstall-package package-name 和Install-Package package-name 。然后参考是好的。当我查看主项目的packages.config时,它包含对Package的正确引用。所以我已经放弃让TFS正确地获取包,但由于Install-Package和Uninstall-Package只是CMI命令,我不能自动化(或者我可以)?有没有人知道我是否可以在从TFS中提取源但在构建之前将其自动化?

2 个答案:

答案 0 :(得分:0)

黄色感叹号问题应与参考路径相关。将源从TFS下载到另一个位置时,系统无法在原始参考路径更改时找到引用。

因此,您需要重新安装软件包,您可以在软件包管理器控制台中使用NuGet命令行:

Update-Package -reinstall

答案 1 :(得分:0)

  

因为Install-Package和Uninstall-Package只是CMI命令,所以我不能自动化(或者我可以)?有没有人知道我是否可以在从TFS中提取源但在构建之前将其自动化?

简单的答案是你可以自动化。您可以使用命令Install-PackageUninstall-Package在程序包管理器控制台中将程序包重新安装到项目中,但似乎无法自动执行此操作。请原谅我下面的冗长解释。

首先,我们需要知道NuGet CLIPackage Manager之间的操作Install packages的不同,尽管NuGet CLI和Package Manager都支持操作Install packages

NuGet CLI 上的操作Install packages

enter image description here

显然,当您在NuGet CLI上使用Install-packages操作时,NuGet不会重新安装引用,只需将软件包下载到packages文件夹即可。见NuGet CLI reference

  

install命令不会修改项目文件或packages.config;   以这种方式,它类似于恢复,因为它只添加包   磁盘但不会改变项目的依赖关系。

相反,操作在程序包管理器上安装程序包:

  

将程序包及其依赖项安装到项目中。

如果要自动执行此操作,必须通过NuGet CLI执行此操作。由于NuGet CLI上的Install包不会修改项目的引用,因此我们无法自动化操作安装包来更新项目的引用。

此外,我们也不建议您自动执行此操作。一旦实现了自动化,NuGet每次都会在构建项目之前执行卸载/安装操作。我们只需要在从TFS获取项目后进行卸载/安装操作。如果在NuGet恢复后没有破坏项目的引用,我们甚至不需要执行此操作。因此根据项目的参考来确定是否使用命令:

Update-Package -reinstall
包管理器控制台中的

应该是最佳选择。