我修改了一个解决方案,删除了一个.csproj文件,然后将.dlls打包到一个NuGet包中。然后,我将包添加到引用.dlls的另外两个.dlls文件中。一切都很好--它在本地构建,但我无法让它构建在构建服务器上。当我查看从TFS获取的用于构建的代码时,我发现两个项目的packages.config都有对NuGet包的正确引用,但是当我在VS中打开解决方案时,引用旁边有一些黄色感叹号,因为它们是中断的引用。我能让它构建的唯一方法是打开NuGet CMI并执行卸载包包名称和安装包名称。那么参考资料就很好了。当我查看主项目的packages.config时,它包含了对包的正确引用。因此,我已经放弃了让TFS正确地抓取包,但是由于安装包和卸载包是CMI命令,所以我不能自动化它(或者我可以吗?)有没有人知道,在从TFS中提取源代码之后,但在构建之前,我是否可以实现自动化呢?
发布于 2017-08-15 10:00:41
黄色感叹号问题应该与引用路径相关。当您将源从TFS下载到另一个位置时,随着原始引用路径的更改,系统将无法找到引用。
因此,您需要重新安装包,您可以在package控制台中使用NuGet命令行:
Update-Package -reinstall发布于 2017-08-17 06:39:20
因为安装包和卸载包都是CMI命令,所以我不能自动化(或者可以)?有没有人知道,在从TFS中提取源代码之后,但在构建之前,我是否可以实现自动化呢?
简单的答案是,您可以,而不是自动化。您可以使用命令Install-Package和Uninstall-Package将包重新安装到Package控制台中的项目中,但这似乎不可能实现自动化。请原谅我下面冗长的解释。
首先,我们需要知道NuGet CLI和包管理器之间操作Install packages的不同,尽管NuGet CLI和Package都支持操作Install packages。
Install packages在NuGet CLI上的操作

显然,当您在NuGet CLI上使用Install-packages操作时,NuGet不会重新安装引用,只需将包下载到packages文件夹。请参见NuGet CLI参考:
安装命令不修改项目文件或packages.config;通过这种方式,它与restore类似,它只向磁盘添加包,而不更改项目的依赖项。
相反,在包管理器上运行安装包
将包及其依赖项安装到项目中。
如果您想要自动化这一点,您必须通过NuGet CLI执行此操作。由于NuGet CLI上的安装包不会修改项目的引用,所以我们无法自动化操作安装包来更新项目的引用.。
此外,我们也不建议你自动化这一点。一旦您实现了自动化,每次构建项目之前,NuGet都会执行卸载/安装操作。我们只需要在从TFS获得项目之后进行卸载/安装操作。即使我们不需要执行此操作,如果项目的引用在NuGet恢复后没有中断。因此,根据项目的参考来确定是否使用命令:
Update-Package -reinstall在控制台中应该是最佳选择。
https://stackoverflow.com/questions/45684692
复制相似问题