【问题标题】:Why the .NET framework takes so long to install? Why is it complex to make it portable?为什么 .NET 框架需要这么长时间才能安装?为什么让它便携起来很复杂?
【发布时间】:2012-09-11 00:10:08
【问题描述】:

我问这个问题主要是为了学习。假设我想将一个非常小的控制台应用程序(50 lines of code Also I am using the System.Text.RegularExpresion namespace.) 发送给在 .net framework 4.0 上使用 c# 编写的朋友。我想让应用程序可移植,因此我只需将 bin 目录的输出发送给他。

他为什么要安装.net framework 4.0 客户端,这需要相当长的时间。此外,最好只包含我计划在这种情况下使用的 dll 库 system.dll(该库包含 system.text.regularexpressions 命名空间)。

换句话说,为什么我不能在我的控制台应用程序中包含 system.dll 以使其可移植并使其在未安装 .net 框架的计算机上工作。

.net framework 4.0 的安装为什么这么复杂?如果 windows 将所有 .net 库放在 C:\Program Files\.net framework 4.0\ 上,然后在安装时将密钥写入安装该框架的路径的注册表,以便程序能够找到必要的 dll,会发生什么情况。

为什么一般来说安装如此复杂?

我尝试使用反射器对 system.dll 进行反编译,然后将其包含在我的项目中,但没有成功

编辑

我想我的问题应该是为什么 .net framework 4.0 需要这么长时间才能安装?如果 windows 在哪里将必要的 dll 放在程序文件上,然后将这些 dll 所在的路径写入注册表,为什么不能运行 .net framework 4.0。这个过程会快得多。为什么不这样做呢?


总之

感谢您的帮助,我现在明白了 CLR 的重要性。 我想我唯一想了解的部分是为什么安装需要这么长时间。我知道有成千上万的 dll。将这些 dll 解压缩到程序文件并在注册表上写入 10000 个键应该更快。

【问题讨论】:

  • 尝试编写一个可以在 Windows 和 Unix 风格上构建的 C++ 应用程序,看看您是否仍然觉得 .NET 使可移植性变得困难:)
  • Framework 的哪一部分让您感到困惑? .NET 2.0 附带 Windows 7 及更高版本。
  • 我不建议这样做,但您可以使用remotesoft.com/linker 来制作原生程序集。
  • 可移植性可能最好由具有先决条件检查的安装程序来实现。 WiX 是你的朋友。考虑使用 .net 客户端配置文件,以减少下载要求,但请注意,.net 4.5 中不再提供此功能
  • 你怎么能期望在操作系统上预装尚未发布的FrameWork。正则表达式自 1.0 以来一直存在。为什么要定位 4.0?

标签: c# .net installation asp.net-4.0


【解决方案1】:

您的问题似乎可以归结为“为什么我需要安装整个 .NET Framework,而不是只包含所需的 DLL?”

答案是 .NET Framework 不仅仅包含 DLL。该框架的另一个主要组件是 CLR,它负责执行和管理 .NET 代码。 .NET 框架由许多其他较小的东西(例如编译器)组成,它们不是运行代码所必需的,但仍包含在框架中。

对于 .NET,CLR 比 DLL 本身更重要。它类似于计算机上的 CPU。没有它,什么都做不了,你拥有的可执行程序只是垃圾数据。 CLR 负责 JIT 将您的代码编译为本机可执行文件、内存管理等。它在概念上与 Java 应用程序的 JVM 非常相似。

即使是 DLL 也比看起来更复杂。尽管理论上您可以(暂时忽略 CLR)在您的应用程序中部署依赖 DLL,但请记住,所有这些 DLL(mscorlib 除外)都依赖于更多 DLL,依此类推,包括大量依赖对于一个简单的应用程序。

【讨论】:

  • +1 感谢您的帮助!但是CLR不只是更多的dll被程序执行吗?为什么不将 CLR 所需的所有 dll 包含在使用这些 dll 的可执行程序中?
  • CLR 不仅仅是一个程序。它与 Windows 紧密集成,需要通过安装程序正确配置。
  • 那么安装程序会修改windows文件吗?这就是为什么需要这么长时间?
  • 安装时间长的原因是它有很多东西要安装。这么大的框架,安装难免需要很长时间。
【解决方案2】:

C# 编程语言要求在运行目标程序之前首先在目标计算机上安装 .Net 框架。 VB.NET 和 F# 具有相同的要求。 .net 框架是一组非常庞大的库,不仅需要几个 .DLL 文件,还需要访问系统注册表。有相当深的集成,大部分通过 COM,但深入到 Win32(至少对于 WinForms)。

现在,微软可以让 C# 直接编译为本机代码,但这不是他们决定做的。这些程序需要按设计安装框架。就像现在一样,.Net 框架是必需的。在 2001 年首次引入 C# 和 .Net 时,这是一笔更大的交易,因为每个人都必须安装它!今天,Windows 7(和 Vista)预装了它,使用户更容易使用。对于服务器端(网络应用程序)来说,这也没什么大不了的,因为它不是在许多客户端计算机上安装它的问题

看待它的一种方式是,如果每个程序都有自己使用的 .Net 库集合,则每个程序都需要所有库,从而使维护错误修复变得更加困难。通过在计算机上安装一个框架,当发现错误时,Microsoft 可以修补框架的一个版本,而不是如果每个程序都有自己的一组库文件,则文件可能存在的多个位置。

至于可移植性,您可以使用 Mono 在 Linux 和 Mac 上运行这些相同的 .Net (C#) 二进制文件。当然,在其他平台上,您仍然需要安装 Mono 才能使其工作。

【讨论】:

  • Windows 8 还预装了 NET 4.5。
猜你喜欢
  • 2013-02-06
  • 2019-09-15
  • 2019-11-13
  • 1970-01-01
相关资源
最近更新 更多