Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nuget命令行更新不';t检测所有需要更新的packages.config_Nuget_Teamcity_Nuget Update - Fatal编程技术网

nuget命令行更新不';t检测所有需要更新的packages.config

nuget命令行更新不';t检测所有需要更新的packages.config,nuget,teamcity,nuget-update,Nuget,Teamcity,Nuget Update,我们有一个构建步骤,在out build server(TeamCity)上的解决方案中安装和更新nuget软件包。最近,它已停止正确执行更新。我对此进行了调查,发现问题似乎在于nuget中的update命令没有更新解决方案中的所有项目。我可以在本地机器上复制它 运行此命令时: .nuget\NuGet.exe update Our.Company.sln -Source http:/ourTcServer:8888/guestAuth/app/nuget/v1/FeedService.svc

我们有一个构建步骤,在out build server(TeamCity)上的解决方案中安装和更新nuget软件包。最近,它已停止正确执行更新。我对此进行了调查,发现问题似乎在于nuget中的update命令没有更新解决方案中的所有项目。我可以在本地机器上复制它

运行此命令时:

.nuget\NuGet.exe update Our.Company.sln -Source http:/ourTcServer:8888/guestAuth/app/nuget/v1/FeedService.svc -RepositoryPath packages -verbosity detailed
我得到了一份它将要更新的10个项目的清单

Found 10 projects with a packages.config file. (
Company.Project1.csproj,
Company.Project2.csproj,
Company.Project3.csproj, 
Company.Project4.csproj, 
Company.Project4.SubProject1.csproj,
Company.Project4.SubProject2.csproj,
Company.Project1.SubProject1.csproj, 
Company.Project1.SubProject2.csproj,
Company.Project2.SubProject1.csproj,         
Company.Project2.SubProject1.FurtherSubProject1.csproj)
但是,该解决方案包含13个项目,这些项目都包含
packages.config
文件,就我所知,它们与其他项目没有什么不同。项目是一个单独的项目及其子项目,我们的项目目录结构与项目名称匹配(因此project1.subproject1意味着subproject1位于project1内的文件夹中),以防出现重要情况。有问题的项目都在一个项目中,该项目的具体名称如下:

Company.Something.SomethingElse.Routing
Company.Something.SomethingElse.Routing.Tests
Company.Something.SomethingElse.Routing.Tests.Specifications
如果名称的路由部分导致问题(在使用包名称末尾的单词
Resources
之前,我们遇到了问题)

我们有50多个解决方案,它们都使用相同的构建配置和步骤,并且对所有这些解决方案都很好。此解决方案似乎是唯一没有正确更新的解决方案


有人知道为什么会这样吗?或者有人知道在解决方案中查找包的代码会做什么,这可能会导致它找不到某些packages.config文件吗?或者任何可能有助于跟踪此问题的内容?

好的,问题是我们已经重命名了一些项目,因此.csproj文件没有被删除为旧的、未使用的项目文件,nuget有一段代码,可以找到要更新包引用的项目文件。它通过在packages.config所在的同一目录中查找所有.csproj文件(或您正在使用的任何项目文件风格)来实现这一点。如果这并没有导致正好1个文件,那么它会抛出一个异常,随后会捕获并忽略该异常,并且不会记录任何内容,因此您是不明智的


希望这将有助于其他人在未来。可能是我。

我发现我遇到的问题是我的项目不在解决方案的同一目录树中

给定解决方案文件时的
nuget.exe update
命令使用解决方案目录作为起点搜索packages.config文件,而不是查看解决方案中的每个项目文件

从:

您可以看到,他们只是在查找从解决方案目录开始的*.config文件

我的项目和解决方案是这样组织的:

/Libraries/Shared/Shared.csproj
/Programs/NTService/NTService.csproj
/Programs/NTService.sln
在这种情况下,如果我对NTService.sln文件运行更新,它将只更新NTService.csproj引用,因为它与NTService.sln文件位于同一目录树中


因为它只查看整个树中的所有包,所以我只是在我的存储库的根目录下放置了一个解决方案文件,然后对其运行更新。解决方案文件中包含哪些项目并不重要。

这是有用的信息,但在我的情况下,我只有一个.csproj文件,并且此项目与并行文件夹中的其他项目完全没有区别。它甚至更新了packages.config文件,但没有更新.csproj文件,而且我有一个断开的引用。有什么建议吗?忽略我之前的评论,我被愚弄了,我从错误的目录中查看了packages.config。csproj没有被更新,因为它的packages.config(真实版本)已经填充了版本(并且是最新的可用包版本)。是的,我也有这个问题,但是我无法移动.sln文件,所以我必须在更新脚本中为这些项目添加单独的nuget update调用。但是要找出发生了什么事情需要一段时间,它应该从.sln文件中获取项目(这样不仅可以避免问题,而且每次搜索文件夹都可以节省大量时间)。@P.W.正如我在评论中提到的,您只需要在根目录中有一个解决方案文件。您不需要将解决方案移动到根目录。我同意它应该只关注解决方案中的项目。
/Libraries/Shared/Shared.csproj
/Programs/NTService/NTService.csproj
/Programs/NTService.sln