汇编语言和动态链接库(DLL)的区别

45

汇编语言和动态链接库(DLL)的区别是什么?在向远程客户端发送代码时,应该发送DLL文件还是发送汇编程序(当两者之间有直接TCP连接时)?


https://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93 和 https://zh.wikipedia.org/wiki/.exe - carloswm85
12个回答

46

程序集是.NET的“最小部署单元”。通常,一个程序集对应一个单独的文件,但不一定要这样 - 你可以有多个文件,其中一个是主文件,知道其他所有文件的位置。

单文件程序集通常是DLL或EXE文件。如果你有一个普通的类库,只想将其发送到另一端,那么DLL就是你想要的。只有在遇到更复杂的情况时才需要担心 :)


1
@Jon Skeet,抱歉我的问题可能很幼稚,但是您所说的单文件程序集是指像 class1.cs 这样的单个文件吗?如果那不太恰当,您能否请解释一下这个术语。 - khalid khan
1
@khalidkhan:不,单文件程序集只是由单个文件(通常是.dll或.exe文件)组成的程序集。它仍然可能来自多个文件。很少出现多文件程序集...我自己也记不起来曾经使用过一个。 - Jon Skeet
@JonSkeet资源文件生成的卫星程序集计算在内吗? - Gusdor
@Gusdor:恐怕我不行。 - Jon Skeet

13

.NET的dll是一个程序集,但.NET的exe文件也可以是程序集,这意味着所有.NET的dll都是程序集,但反过来不成立。

你不应该向客户端发送实际代码。相反,你应该在客户端和服务器端都有类型定义,并在两者之间发送序列化的 实例


除了本地DLL,我不认为我会将它们视为“程序集”,因为这里的术语似乎更多地是.NET使用。 - BobbyShaftoe
@BobbyShaftoe:我已经更新了答案,以指定.NET程序集。 - casperOne
@capserOne - 你能详细解释一下“序列化实例”吗? - Pushkar
@Pushkar:为什么你要试图将整个程序集推送到网络上? - casperOne
@Casper - 我正在尝试实现一种远程信任机制,需要将移动模块发送到客户端机器。我们不能发送完整的移动EXE文件,因此决定发送代码 - 但不能无编译地发送。所以不得不将其编译为DLL并发送。认为使用汇编语言会更好。 - Pushkar

11

汇编语言基本上是一个包含 MSIL 代码和元数据的文件。它是 .NET 应用程序最小的部署单位。在 .NET 中,一个程序集有两种扩展名(.exe 和 .dll)。

DLL : 动态链接库。因此,我们可以说 DLL 是一个程序集,但一个程序集不一定总是 DLL。

换句话说,DLL 是程序集的一种类型。


1
“dll是程序集的一种类型”这种说法是不正确的。程序集采用dll文件的形式,一个程序集可以是一个dll文件,但是dll文件并不一定是程序集文件。 - user4732674

7

汇编是包含已编译代码的文件。有两种类型的汇编。当您编译C#程序时,就会创建一个汇编。可执行文件(有时称为“进程汇编”)具有EXE文件扩展名。本书中的所有程序都编译为可执行文件。这些是可以执行的汇编; 就是您可以双击运行的EXE文件。还有库汇编,其具有DLL文件扩展名。DLL代表动态链接库。它们通常被称为类库,因为它们包含可以在程序中使用的类。


2
  1. 独立于dll项目。

  2. 程序集是针对项目特定的。

  3. 程序集是一个或多个文件的集合,其中一个是DLL或EXE。

  4. DLL包含可供在Windows上运行的任何程序使用的库代码。 DLL可以包含结构化或面向对象的库。

  5. DLL文件可以有几乎无限的可能入口点。

  6. bin中存在的程序集可以具有强/弱名称,而GAC中的程序集应具有强名称。


1

.Exe 1. 这些是出站文件。 2. 每个应用程序只存在一个 .exe 文件。 3. .Exe 不能与其他应用程序共享。

.dll 1. 这些是入站文件。 2. 一个应用程序中可能存在多个 .dll 文件。 3. .dll 可以与其他应用程序共享。


语句1不正确。请参见:https://dev59.com/pYDba4cB1Zd3GeqPCUzL - user2338150

1
这个问题似乎不太合理。.dll和.exe都是程序集,只是程序集的扩展名不同。两者都可以包含MSIL代码,但.exe只有一个入口点,即Main函数。但.dll可以有多个入口点。
程序集是部署的最小单位,可以是dll或exe。这些程序集有两种类型:静态和动态。我们还有一种静态程序集,即卫星程序集,其中包含资源(图像、资源文件等)。您可以为程序集使用强名称,通过在GAC中注册来使其可用于全局使用。

汇编语言和库(DLL)之间有区别,而 DLL 不是可执行文件。 - Erdinc Ay

1

汇编是预编译的代码,将被传递到 .net JIT 运行时。

它是一种机器无关的代码格式,可以由任何 .net 命令语言运行时运行。

DLL 和 EXE 是汇编的常见格式。


0

程序集和 DLL 之间的区别有点像飓风和台风之间的区别。这只取决于它发生在哪个海洋。

.NET 世界中的 DLL 或 EXE 被称为程序集。而在本地 Windows 系统中,它们被简单地称为 DLL 或 EXE。

另一个值得注意的区别是,程序集可以是 DLL 或可执行文件。而在本地 Windows 系统中,我们通常认为 DLL 和可执行文件是两种不同类型的项目。


0

“Assembly”是一个用于.NET资源的术语。这不一定是DLL。 DLL可以是.NET资源,但也可以是“本机”资源。程序集可以打包在DLL或EXE中。这取决于特定的程序集。

如果这类似于您的其他问题,您需要发送包含程序集的文件。您可能能够做一些更复杂的事情,但仅仅如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接