首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Visual 2022为解决方案中的所有项目全局管理nuget包?

如何使用Visual 2022为解决方案中的所有项目全局管理nuget包?
EN

Stack Overflow用户
提问于 2022-02-02 08:05:52
回答 1查看 3.2K关注 0票数 4

我使用VisualStudio2022在.NET 6.0中创建了一个解决方案,该解决方案有许多项目。

每个项目在.csproj文件中都有如此多的nuget包引用,如下所示。

是否可以在解决方案中的单个位置/全局管理所有nuget包(而不是针对每个项目)?

这将确保解决方案中的所有项目都使用相同版本的包(相同nuget包的项目之间不再有版本冲突)。

在中央位置更新一次包,将确保所有项目都引用相同的更新版本。不需要更新每个项目的包。

谢谢你的帮助。

代码语言:javascript
运行
复制
  <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>
EN

回答 1

Stack Overflow用户

发布于 2022-07-23 04:31:46

提到了新的CPM特性,但我想我也会包括一个完整的例子。

您可以使用nuget的新“中央包装管理”功能。

示例问题:

假设您有多个项目的monorepo (即VS“解决方案”或VSCode“工作区”)。

ProjectA.csproj

代码语言:javascript
运行
复制
<ItemGroup>
  <PackageReference Include="Foo.Bar.Baz" Version="1.0.0" />
  <PackageReference Include="Spam.Ham.Eggs" Version="4.0.0" />
</ItemGroup>

ProjectB.csproj

代码语言:javascript
运行
复制
<ItemGroup>
  <PackageReference Include="Foo.Bar.Qux" Version="1.2.3" />
  <PackageReference Include="Spam.Ham.Eggs" Version="4.5.6" />
</ItemGroup>

有些项目是相同的,而另一些则不同。您需要记住保持版本的同步--示例显示您忘记了这样做!

步骤1:删除版本

ProjectA.csproj

代码语言:javascript
运行
复制
<ItemGroup>
  <PackageReference Include="Foo.Bar.Baz" />
  <PackageReference Include="Spam.Ham.Eggs" />
</ItemGroup>

ProjectB.csproj

代码语言:javascript
运行
复制
<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的文件添加到回购的根目录

代码语言:javascript
运行
复制
<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 医生们以获得更多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70952225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档