.NET 应用程序中的程序集 DLL EXE

.NET 中的程序集是什么?

根据 MSDN 的说法,程序集是 .NET Framework 应用程序的构建基块;它们构成了部署的基本单位。简单地说,我们可以说,程序集只不过是一个预编译的 .NET 代码,可以由 CLR(通用语言运行时)运行。

让我们以一个示例来理解上述定义。为了理解这一点,让我们创建一个名称为 MyConsoleApp 的简单控制台应用程序。创建控制台应用程序后,请修改程序类,如下所示。
.NET 应用程序中的程序集 DLL EXE

现在,如果您右键单击项目并单击文件资源管理器中的"打开文件夹",您将发现许多内容(源代码,即 Program.cs 类文件、配置文件(即应用程序、包含 AssemblyInfo.cs 类文件等的属性文件夹),如下图所示。
.NET 应用程序中的程序集 DLL EXE

但是,当您构建应用程序时,它会将整个事情放入单个 EXE 中,如下图所示。您可以在 bin => 调试文件夹下找到此文件。
您可以复制这个程序集,即 MyConsoleApp.exe,并把它放在计算机的任何地方,从那里你可以运行它。
.NET 应用程序中的程序集 DLL EXE

因此,程序集只不过是一个部署单元,或者它是 CLR 可以执行的预编译代码块。为了更好地了解,请看下图。
.NET 应用程序中的程序集 DLL EXE

.NET 框架中的程序集类型

在 .NET 框架中,有两种类型的程序集。它们如下所示:
1.EXE(可执行)
2.DLL(动态链接库)
在 .NET 框架中,当我们编译控制台应用程序或 Windows 应用程序时,它会生成 EXE,而当我们编译类库项目或 ASP.NET Web 应用程序时,它会生成 DLL。In.NET框架中,EXE 和 DLL 都称为程序集。

在 .NET 框架中了解 DLL 和 EXE

上面已经创建了一个控制台应用程序,并且我们已经看到它创建了一个 EXE。让我们看看 DLL 的示例。
为了创建 DLL,让我们将类库项目添加到名称为 MyClassLibrary 的同一解决方案中。
创建类库项目后,默认情况下,它将创建一个名称为 Class1 的类文件, 如下所示。
.NET 应用程序中的程序集 DLL EXE

因此,现在我们的解决方案包含两个项目。一个是控制台应用程序,另一个是类库项目,如下所示。
.NET 应用程序中的程序集 DLL EXE

现在,生成解决方案,您应该在自己的 bin => Debug 文件夹中获得预期中的程序集。现在,你想到的问题是DLL和EXE有什么区别?

.NET 框架中的DLL和EXE有什么区别?

EXE 在其自己的地址空间或自己的内存空间中运行。如果您双击 MyConsoleApp EXE,那么您将获得以下输出。现在,这个程序在它自己的内存空间中耗尽了。
.NET 应用程序中的程序集 DLL EXE
如果不关闭此窗口,再次,如果您双击 MyConsoleApp EXE,它将再次运行,并显示相同的输出。
这是因为现在,两个 EXE 都在自己的内存空间中运行。您需要记住的是 EXE 是一个可执行文件,可以作为应用程序本身运行。

那么来到 DLL,它不能像EXE那样自行运行。这意味着MyClassLibrary. dll不能由自己调用或运行。它需要一个要调用它的消费者。
因此,DLL 在其他内存空间内运行。其他内存空间可以是控制台、窗口应用程序或 Web 应用程序,它们应有自己的内存空间。

例如,可以从控制台应用程序调用 DLL。我们有一个名为 MyConsoleApp 的控制台, 让我们看看如何从这个控制台应用程序调用 MyClassLibrary. dll 。
为了在 MyConsoleApp 中使用 MyclassLibrary. dll, 首先, 您需要引用该Dll。添加对 MyClassLibrary DLL 的引用后,请修改控制台应用程序的程序类,如下所示。
.NET 应用程序中的程序集 DLL EXE

现在,运行应用程序,您应该会看到以下输出。在这里,MyClassLibrary DLL 在 MyConsoleApp 地址空间内运行。
.NET 应用程序中的程序集 DLL EXE

因此,简言之,它们之间的区别在于EXE是一个可执行文件,可以作为应用程序本身运行,
而DLL通常由EXE或其他DLL使用,我们无法直接运行或执行 DLL。

现在,这个问题应该想到为什么我们需要DLL,因为它不是自己调用的。DLL 背后的原因是可再使用性。
假设您在许多应用程序中需要一些类、逻辑或其他内容,然后只需将这些类、逻辑放入DLL中,并在需要的地方引用该DLL。

.NET 应用程序中的程序集 DLL EXE

上一篇:89C51单片机定时器控制的流水灯


下一篇:JS高级总结