提问人:CesarGon 提问时间:5/8/2022 最后编辑:CesarGon 更新时间:5/13/2022 访问量:336
在平台和技术之间移植 .NET 代码时的命名空间和程序集名称
Namespace and assembly names when porting .NET code between platforms and technologies
问:
我有一些(超过 50 个).NET Framework 程序集,这些程序集是我随着时间的推移而开发的。我一直遵循约定,以应用程序中的根命名空间命名我的程序集。例如,我有一个名为 Bundt 的应用,因此它的根命名空间是 Incipit.Bundt。此应用程序中的程序集被命名为 Incipit.Bundt.ModellingEngine、Incipit.Bundt.ModelDesigner 等。
现在,我计划将其中一些代码移植到 .NET Core。此外,其中一些程序集是 WinForms 应用程序,我将把它们移植到 WPF 中。我的目的是保留软件的两个版本,旧的和新的,并在不同的场景中使用它们。
我不确定移植时应该如何处理命名空间和程序集名称。我应该保持它们不变,还是应该重命名它们以反映新平台(Core 而不是 Framework)或技术(WPF 而不是 WinForms)?
例如,我想将 Incipit.Bundt.ModellingEngine 库从 .NET Framework 移植到 .NET Core。我应该保留相同的命名空间和程序集名称,还是应该更改它?同样,我想将 Incipit.Bundt.ModelDesigner WinForms 可执行文件从 .NET Framework 移植到 .NET Core,并使其成为 WPF 应用程序。同样,我是否应该更改命名空间和程序集名称以反映这一点?
我们非常欢迎任何关于移植最佳实践的提示。谢谢。
答:
问题 #1
我应该保留相同的命名空间和程序集名称,还是应该更改它?
让我们把这个问题分成两个:
- 如果我使用相同的命名,它会导致什么问题?
- 哪种命名会在消费者方面产生更多的工作?
让我们从前者开始。不太可能有人希望在同一应用程序中使用您的两个程序集
- 选择旧的或新的
- 因此,这不会导致程序集歧义
后者呢?假设移植的库可以支持 .NET Standard 1.2。这允许我们在 .NET Framework 4.6+ 应用程序中使用此库。
- 如果该应用程序可以在没有任何命名导致中断性更改的情况下进行升级,那么这是最好的
- 如果应用程序升级需要对语句进行重构,那就不是那么好了
using
旁注:如果可以将库移植到 .NET Standard 2.0(支持具有 4.6.1+ .NET FW 的应用),则很有可能弃用旧库并在任何地方使用新库。
问题 #2
我是否应该更改命名空间和程序集名称以反映这一点?
据我了解,您的示例不能在 Winforms 应用程序中使用新库,也不能在 WPF 中使用旧库。因此,它们不能在同一应用程序中使用。
恕我直言,这个问题更基于意见。您绝对可以使用相同的名称,并且不会造成任何伤害。但是,如果您要重命名它,那么这可以清楚地说明它应该在哪里使用。
问题 #3
这个问题是我提出的
如果我通过 nuget 发布这些程序集会怎样?
在这种情况下,如果你想使用相同的名称,它可能会导致问题,因为你不能有多个具有相同名称的 nuget 包。
如何解决这个问题?以下是选项:
- 使用相同的程序集和命名空间名称,但通过
.nuspec
文件使用不同的 nuget 包名称 - 对新移植的库使用不同的主要版本
评论