【问题标题】:Net Core Migrate Projects to 3.1: Should we Upgrade Common/Shared Project First?Net Core 将项目迁移到 3.1:我们应该先升级公共/共享项目吗?
【发布时间】:2020-06-27 03:34:19
【问题描述】:

我们即将升级我们的 .Net Core 解决方案。我们有多个微服务,例如:

  1. 客户
  2. 计费
  3. 帐户
  4. 库存
  5. 营销

他们都依赖于Common Utilities Project。它包含很棒的工具,例如:

  • 文件解析器,
  • 扩展方法,
  • 常用函数/方法

整个公司都在使用。


当我们想从 2.2 升级到 3.1 时,哪个应该是第一个项目?

我想知道如果我们所有的 2.2 微服务都指向 3.1 实用程序项目怎么办?!

a) 这些项目是否向前兼容?

b) 如果新的 (3.1) Common 项目没有正确升级,这就是为什么所有其他解决方案都会遇到错误怎么办?

c) 我的建议是从将所有 5 个微服务升级到 3.1 开始,最后将通用解决方案升级到 3.1。这是最优解吗?

我正在尝试阅读Upgrade guide

【问题讨论】:

  • 也许先更新你的包?一般来说,这里没有正确的答案。由您决定升级策略是什么

标签: c# .net asp.net-core .net-core asp.net-core-3.1


【解决方案1】:

如果公共项目发布到内部 nuget 提要。 您可以使用 .csproj 中的目标框架来创建面向 .net core 3.1 和 2.2 的通用项目的新版本

<TargetFrameworks>netcoreapp2.2;netcoreapp3.1</TargetFrameworks>

然后您可以更新每个服务个体。

如果所有内容都在同一个解决方案中,并且您正在使用项目引用,那么您并没有真正在做微服务,我建议将通用代码放在不同的解决方案中并将它们发布到内部 nuget 提要。

当我们进行升级时,我们首先升级我们的通用包。然后我们选择了一个简单的服务来升级到 .net core 3.1 并通过 nuget 升级它的所有依赖项,包括我们的通用包。

在第一次升级时,我们在自定义 swashbuckle 代码方面遇到了一些问题,但在我们完成一项服务之后,其他服务就一帆风顺了。

关键是对所有依赖项使用 nuget,包括您自己在共享库中编写的依赖项。

我们首先更新了通用包,因为如果不使用新版本,它不会影响任何服务。只有在微服务中更新通用包的版本时才会影响服务。

您可以通过设置正确的 nuget 包的分支/预发布标签来设置 Common,并为您的包制定明确的版本策略。

【讨论】:

  • 我们首先更新了通用包,因为如果不使用新版本,它不会影响任何服务。只有在微服务中更新通用包的版本时才会影响服务。您的 csproj 文件中的公共包是 PackageReferences 还是 ProjectReference?
  • 好的,我们有所有的 nugets,所以一旦我们将 Common 升级到 3.1,然后添加新方法,2.2 项目就不能再使用添加的方法了?
  • 您可以通过为您的 nuget 包设置正确的分支/预发布标签,并为您的包制定明确的版本策略。
  • 我同意@PrebenHuybrechts 的策略。这与我在几个大型项目中使用的方法相同。还值得注意的是,除了任何与 ASP.NET 相关的实用程序外,我希望您的共享类库具有最少数量的重大更改——如果有的话。我在升级中遇到的大多数挑战都与 MVC 工具的深度定制有关。大多数其他一切都继续工作。
【解决方案2】:

如果通用包只是工具,我强烈建议您先将它们转换为 .Net Standard,这样它们就可以被所有 .Net Core 版本以及您可能拥有的任何旧框架使用。

【讨论】:

    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2020-10-26
    • 2021-10-24
    相关资源
    最近更新 更多