在许多项目/解决方案中不断更新Nuget软件包

在许多项目/解决方案中不断更新Nuget软件包,nuget,nuget-server,Nuget,Nuget Server,如果在多个解决方案上使用相同的nuget软件包,我如何使它们保持最新,而不必在发布新版本时打开每个解决方案和更新软件包 文件夹结构通常与此类似,但涉及更多的项目。每个项目都有自己的packages.config,带有各种包引用 $tfs/ ├── Solution One/ │ ├ Solution 1.sln │ ├ nuget.config (solution item) │ ├── Packages/ │ ├ ├── Newtonsoft.JSON.12.0.2/

如果在多个解决方案上使用相同的nuget软件包,我如何使它们保持最新,而不必在发布新版本时打开每个解决方案和更新软件包

文件夹结构通常与此类似,但涉及更多的项目。每个项目都有自己的
packages.config
,带有各种包引用

$tfs/
├── Solution One/
│   ├ Solution 1.sln
│   ├   nuget.config (solution item)
│   ├── Packages/
│   ├    ├── Newtonsoft.JSON.12.0.2/
│   ├    ├── Jquery3.1.4/
│   ├── Project one/
│   ├       ── packages.config
│   ├       ── whatever.cs
│   ├       ── folder /
│   ├       ── another folder /
│   ├── Project Two/
│   ├       ── packages.config
│   ├       ── file.cs
│   ├       ── folder/
│   ├       ── another folder/
├── Solution Two/
│   ├ Solution 2.sln
│   ├   nuget.config
│   ├── Packages/
│   ├    ├── Newtonsoft.JSON.11.1.0/
│   ├    ├── Jquery1.3.4/
│   ├── Project one/
│   ├       ── packages.config
│   ├       ── whatever.cs
│   ├       ── folder /
│   ├       ── another folder /
│   ├── Project two/
│   ├       ── packages.config
│   ├       ── file.cs
│   ├       ── folder/
│   ├       ── another folder/
我已尝试在Package Manager控制台中运行此powershell,但一次仅适用于一个解决方案:

$packageId = "jquery"
Get-ChildItem *.sln -recurse | %{.\\nuget.exe restore $_.fullname}
Get-ChildItem packages.config -Recurse `
| Where-Object {$_ | Select-String -Pattern $packageId} `
| %{.\\nuget.exe update -Id $packageId $_.FullName}
我是否需要更新每个项目的每个解决方案中的
packages.config
,并打开它们以获得更新?我本以为会有一个更简单的方法来做到这一点。我使用的是一个私有的nuget服务器,如果它能起作用的话


注意:我已经看了这个问题:它与我的情况不同。我希望跨多个解决方案更新软件包,而不是在一个解决方案中更新多个项目。

正如@imps在评论中所说,没有跨解决方案更新
packages.config
项目的解决方案。在一个解决方案中,您可以使用NuGet Package Manager UI的“管理解决方案的包”,并且“合并”选项卡有助于确保所有项目使用相同的版本,但您需要对所有解决方案重复此操作

如果使用,则可以利用MSBuild扩展性导入公共
props
文件,如果使用Visual Studio 2017或更高版本,则可以在所有项目的最高公共父目录中使用

在props文件中,定义您关心的软件包的版本,如下所示:


12.0.1
然后在
csproj
文件中,使用
。这样做的问题是,您不能再使用VS中的Package Manager UI或Package Manager控制台进行升级(您可以,但它会在
csproj
中更改它,而不是在
props
文件中更改),但您仍然可以使用UI检查更新。如果您将
道具
文件添加到您的解决方案中,那么只需单击两下并轻触键盘即可更新,所以这真的没什么大不了的

在您的示例中,公共父目录将是TFS根目录,因此
$/directory.Build.props
。问题是,如果您使用CI并有一个触发器来运行对
$/Solution One/*
的解决方案一构建更改和对
$/Solution Two/*
的解决方案二构建更改,那么它们都将错过对
$/Directory.build.props
的更改。或者可以配置TFS构建触发器来包含它,但我不记得了,因为我很久没有使用TFVC了

然而,更大的问题是,在您的示例中,很明显您使用的是
jQuery
包。这将使用
内容
,在安装/升级时将文件复制到项目中
PackageReference
不能以这种方式工作(它被列为),因此,除非您希望在web项目中使用不同的过程来升级jQuery和任何其他js/css,否则无法将ASP.NET项目迁移到
PackageReference
。请注意,ASP.NET核心项目是SDK风格的,它只支持
PackageReference
,不支持
packages.config
,通常使用或npm来获取css和javascript


客户可以迁移到SDK风格的项目,他们甚至可以考虑使用这一点有助于确保您不会意外地在您的<代码> CSPROJ/<代码>中删除版本号.< /P>包装。只在VisualStudio工作中安装/更新操作,因此,除非您为此目的创建一个大型解决方案,否则您无法跨不同的解决方案管理更新。所有这些项目和解决方案都在一个回购协议中吗?感谢您的详细解释-这是给我一些想法。我将把这个标记为我猜的答案,因为从技术上讲,这个问题没有解决方案!