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

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

提问人:CesarGon 提问时间:5/8/2022 最后编辑:CesarGon 更新时间:5/13/2022 访问量:336

问:

我有一些(超过 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 WinForms 可执行文件从 .NET Framework 移植到 .NET Core,并使其成为 WPF 应用程序。同样,我是否应该更改命名空间和程序集名称以反映这一点?

我们非常欢迎任何关于移植最佳实践的提示。谢谢。

.NET 体系结构 命名空间 .net-assembly porting

评论

1赞 Simon Mourier 5/11/2022
从你所说的,如果你不在同一个地方分发两个版本,如果你真的是并行的(xcopy部署),为什么不尽可能保持所有内容相同(你可以使用程序集属性而不是名称来标识.dll)?另请注意,可以从 .NET Core 程序中引用某些 .NET Framework 程序集。此外,这里是Microsoft如何使用 SignalR Core 与 NETFx 做到这一点: learn.microsoft.com/en-us/aspnet/core/signalr/... (并不是说我不认为这是好的做法,恕我直言,这是一团糟)。
1赞 Peter Csala 5/12/2022
为什么要将其移植到 .NET Core?为什么不将其移植到 .NET 6?请注意,.NET Core 3.1 的支持将于今年年底结束
0赞 CesarGon 5/13/2022
@PeterCsala 当我说 .NET Core 时,我指的是 .NET 6。名称更改令人困惑。不好意思。
0赞 Peter Csala 5/13/2022
对不起,但你到底在找什么?您是否只想收到您的命名约定足够的确认?或者您正在寻找关于不同替代方案的分析交易?还是xyz?
0赞 CesarGon 5/13/2022
@PeterCsala:我的问题在OP中。为了清楚起见,我现在让他们大胆地面对。如果你能增加一些关于权衡的讨论,那也很棒!

答:

2赞 Peter Csala 5/13/2022 #1

问题 #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 包。

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

评论

1赞 CesarGon 5/14/2022
非常感谢,特别是对利弊的讨论。