在平台和技术之间移植 .NET 代码时的命名空间和程序集名称

Namespace and assembly names when porting .NET code between platforms and technologies

我有几个(超过 50 个).NET Framework 程序集是我随着时间的推移开发的。我一直遵循惯例,以应用程序中的根名称空间命名我的程序集。例如,我有一个名为 Bundt 的应用程序,因此它的根命名空间是 Incipit.Bundt。此应用程序中的程序集被命名为 Incipit.Bundt.ModellingEngineIncipit.Bundt.ModelDesigner

现在我打算将部分代码移植到 .NET Core。此外,其中一些程序集是 WinForms 应用程序,我将把它们移植到 WPF。我的意图是保留软件的新旧两个版本,在不同的场景下使用。

我不确定在移植时应该如何处理名称空间和程序集名称。我应该保持它们不变,还是应该重命名它们以反映新平台(Core 而不是 Framework)或技术(WPF 而不是 WinForms)?

例如,我想将 Incipit.Bundt.ModellingEngine 库从 .NET Framework 移植到 .NET Core。 我应该保留相同的命名空间和程序集名称,还是应该更改它? 同样,我想移植 Incipit.Bundt.ModelDesigner从 .NET Framework 到 .NET Core 的 WinForms 可执行文件,并使其成为 WPF 应用程序。同样,我是否应该更改命名空间和程序集名称以反映这一点?

非常欢迎任何有关移植最佳实践的指示。谢谢。

问题 #1

Should I keep the same namespace and assembly name, or shall I change it?

让我们把这个问题分成两个:

  • 如果我使用相同的命名会导致什么问题?
  • 哪个命名会在 consumer-side 上产生更多的工作?

让我们从前一个开始。不太可能有人想在同一个应用程序中使用您的两个程序集

  • 选旧的还是选新的
  • 所以,这不会导致汇编歧义

后一个呢?假设您的移植库可以支持 .NET Standard 1.2。这使我们能够在 .NET Framework 4.6+ 应用程序中使用此库。

  • 如果该应用程序可以在没有任何命名导致重大更改的情况下升级,那就最好了
  • 如果应用程序升级需要重构 using 语句,那就不太好了

Side-note:如果您可以将您的库移植到 .NET Standard 2.0(支持 4.6.1+ .NET FW 的应用程序),那么很有可能弃用旧库并在任何地方使用新的。

问题 #2

Should I change the namespace and assembly names to reflect this?

据我了解您的示例,您不能在 Winforms 应用程序中使用新库,也不能在 WPF 中使用旧库。因此,它们不能在同一个应用程序中使用。

这个问题更 opinion-based 恕我直言。您绝对可以使用相同的名称,不会造成任何伤害。但是,如果您重命名它,则可以清楚地说明它应该被使用的地方。

问题 #3

这个问题是我提出来的

What if I publish these assemblies via nugets?

在这种情况下,如果您想使用相同的名称可能会导致问题,因为您不能有多个具有相同名称的 nuget 包。

如何解决这个问题?以下是选项:

  • 使用相同的程序集和命名空间名称,但通过 .nuspec file
  • 使用不同的 nuget 包名称
  • 为新移植的库使用不同的主要版本