在许多项目/解决方案中不断更新Nuget软件包
如果在多个解决方案上使用相同的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/
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工作中安装/更新操作,因此,除非您为此目的创建一个大型解决方案,否则您无法跨不同的解决方案管理更新。所有这些项目和解决方案都在一个回购协议中吗?感谢您的详细解释-这是给我一些想法。我将把这个标记为我猜的答案,因为从技术上讲,这个问题没有解决方案!