我修改了一个解决方案并删除了一个.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中提取源但在构建之前将其自动化?
答案 0 :(得分:0)
黄色感叹号问题应与参考路径相关。将源从TFS下载到另一个位置时,系统无法在原始参考路径更改时找到引用。
因此,您需要重新安装软件包,您可以在软件包管理器控制台中使用NuGet命令行:
Update-Package -reinstall
答案 1 :(得分:0)
因为Install-Package和Uninstall-Package只是CMI命令,所以我不能自动化(或者我可以)?有没有人知道我是否可以在从TFS中提取源但在构建之前将其自动化?
简单的答案是你可以不自动化。您可以使用命令Install-Package
和Uninstall-Package
在程序包管理器控制台中将程序包重新安装到项目中,但似乎无法自动执行此操作。请原谅我下面的冗长解释。
首先,我们需要知道NuGet CLI和Package Manager之间的操作Install packages
的不同,尽管NuGet CLI和Package Manager都支持操作Install packages
。
NuGet CLI 上的操作Install packages
:
显然,当您在NuGet CLI上使用Install-packages
操作时,NuGet不会重新安装引用,只需将软件包下载到packages文件夹即可。见NuGet CLI reference:
install命令不会修改项目文件或packages.config; 以这种方式,它类似于恢复,因为它只添加包 磁盘但不会改变项目的依赖关系。
相反,操作在程序包管理器上安装程序包:
将程序包及其依赖项安装到项目中。
如果要自动执行此操作,必须通过NuGet CLI执行此操作。由于NuGet CLI上的Install包不会修改项目的引用,因此我们无法自动化操作安装包来更新项目的引用。
此外,我们也不建议您自动执行此操作。一旦实现了自动化,NuGet每次都会在构建项目之前执行卸载/安装操作。我们只需要在从TFS获取项目后进行卸载/安装操作。如果在NuGet恢复后没有破坏项目的引用,我们甚至不需要执行此操作。因此根据项目的参考来确定是否使用命令:
Update-Package -reinstall
包管理器控制台中的应该是最佳选择。