【问题标题】:Is there a reason to create a .net DLL rather than EXE if file is used as a referenced assembly?如果文件用作引用程序集,是否有理由创建 .net DLL 而不是 EXE?
【发布时间】:2011-08-24 11:09:31
【问题描述】:

我注意到我不仅可以添加对 DLL 的引用,还可以在 Visual Studio 中添加对 EXE 的引用,并像访问 DLL 一样访问 EXE 中的所有类。

是否有任何理由要创建 DLL 或者我也可以引用 EXE?

我问这个问题是因为我经常编写我在 Windows 和 Mac OS 下运行的 .net 程序,我通常的解决方案是创建一个具有该功能的 DLL,然后创建两个 GUI,每个目标一个。

但是,在我看来,我现在似乎可以只编写我的应用程序的 Windows 版本,然后将该 Windows 版本(EXE 文件)添加到我的 Mac 项目并引用 Windows EXE 而不是 DLL。它还有一个额外的优势,即我可以从 Mac 文件夹运行 Windows 版本,而无需添加其他文件。

有什么理由不这样做吗?

【问题讨论】:

  • 在这种情况下,您的 Windows EXE 是否会包含您之前拥有的单独的 UI 部分(如果它是 DLL)?
  • 是的。它可以单独运行,我认为这是一个优势。

标签: .net dll assemblies exe


【解决方案1】:

这取决于您最终会对应用程序进行多少维护/更新。我喜欢原始模型的简洁性,其中 UI 基于平台分离,DLL 包含共享的类。我会发现它对维护/重构来说不那么令人困惑。

【讨论】:

  • 也许吧。但即使在一个项目中,GUI 和业务逻辑仍然位于不同的类和文件中。它的优点是纯 .net 版本(使用 Windows 窗体)是单个 EXE 文件,不需要支持文件。 Mac 版本需要大量支持文件,但包含在 bundle.app 中。
【解决方案2】:

如果您愿意,您可以将所有程序集构建为可执行文件 (.exe) 并引用它们。如果程序集被编译为可执行文件 (.exe) 或类库 (.dll),则与 .NET 没有区别。

唯一的区别是可执行文件有一个额外的Portable Executable (PE) 格式和标题,以便它们可以在Windows 系统上执行。此标头主要用于启动 CLR 运行时。

注意:您也可以将 .dll 程序集构建为 Portable Class Libraries

【讨论】:

  • 所以在我的情况下,引用 EXE 文件而不是 DLL 是一个优势(即功能齐全的 Windows 程序与 Mac 版本一起运行),这样做没有真正的缺点,除了没有将 EXE 拆分为 DLL 和 EXE 的常见缺点?
【解决方案3】:

我看到至少有两个原因仍然应该拆分/

  • 版本控制 - 最好为 dll 和 exse 提供独立的版本号 - 在界面更改时更改版本号尤其好
  • 单一责任和测试

【讨论】:

  • 这些是将应用程序拆分为单独的 EXE 和 DLL 文件的参数,不一定是不引用 EXE 文件的理由。我需要知道是否有理由不引用 EXE 文件,显然除了将应用程序拆分为 GUI 和业务逻辑文件的一般原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
相关资源
最近更新 更多