我使用VisualStudio2022在.NET 6.0中创建了一个解决方案,该解决方案有许多项目。
每个项目在.csproj文件中都有如此多的nuget包引用,如下所示。
是否可以在解决方案中的单个位置/全局管理所有nuget包(而不是针对每个项目)?
这将确保解决方案中的所有项目都使用相同版本的包(相同nuget包的项目之间不再有版本冲突)。
在中央位置更新一次包,将确保所有项目都引用相同的更新版本。不需要更新每个项目的包。
谢谢你的帮助。
<ItemGroup>
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="10.0.1" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.20.0" />
<PackageReference Include="Microsoft.ApplicationInsights.Kubernetes" Version="2.0.2" />
<PackageReference Include="Microsoft.ApplicationInsights.Kubernetes.HostingStartup" Version="2.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.1" />
<PackageReference Include="Microsoft.Azure.ServiceBus" Version="5.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.14.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.1" />
<PackageReference Include="System.Collections" Version="4.3.0" />
<PackageReference Include="System.Runtime" Version="4.3.1" />
</ItemGroup>
发布于 2022-07-23 04:31:46
提到了新的CPM特性,但我想我也会包括一个完整的例子。
您可以使用nuget的新“中央包装管理”功能。
示例问题:
假设您有多个项目的monorepo (即VS“解决方案”或VSCode“工作区”)。
ProjectA.csproj
<ItemGroup>
<PackageReference Include="Foo.Bar.Baz" Version="1.0.0" />
<PackageReference Include="Spam.Ham.Eggs" Version="4.0.0" />
</ItemGroup>
ProjectB.csproj
<ItemGroup>
<PackageReference Include="Foo.Bar.Qux" Version="1.2.3" />
<PackageReference Include="Spam.Ham.Eggs" Version="4.5.6" />
</ItemGroup>
有些项目是相同的,而另一些则不同。您需要记住保持版本的同步--示例显示您忘记了这样做!
步骤1:删除版本
ProjectA.csproj
<ItemGroup>
<PackageReference Include="Foo.Bar.Baz" />
<PackageReference Include="Spam.Ham.Eggs" />
</ItemGroup>
ProjectB.csproj
<ItemGroup>
<PackageReference Include="Foo.Bar.Qux" />
<PackageReference Include="Spam.Ham.Eggs" Version="4.0.0" /> <!-- note version override for this project -->
</ItemGroup>
步骤2:将名为Directory.Packages.props
的文件添加到回购的根目录
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<!-- use 'PackageVersion' rather than 'PackageReference' -->
<PackageVersion Include="Foo.Bar.Baz" Version="1.2.3" />
<PackageVersion Include="Foo.Bar.Qux" Version="1.2.3" />
<PackageVersion Include="Spam.Ham.Eggs" Version="4.5.6" />
</ItemGroup>
</Project>
步骤3:还原
对于每个项目:
dotnet clean
dotnet restore
您的所有项目现在将使用您在配置文件中指定的版本。
还有更多的选项,比如版本重写,以及传递依赖项- read 医生们以获得更多信息。
https://stackoverflow.com/questions/70952225
复制相似问题