.NET程序集 - 可执行和静态 - 混淆

时间:2009-12-20 22:57:12

标签: .net assemblies

我只使用Web应用程序,因此我几乎没有使用.NET设计的Windows Forms的实际经验。

我正在阅读集会,有两种类型; static,以.dll形式出现,exectuable,以.exe形式出现。

据我所知,“可执行程序集”只是已编译应用程序的另一个名称(即控制台应用程序或Windows窗体应用程序)。

你能澄清一下吗?

编辑:我的术语来自这篇文章:http://msdn.microsoft.com/en-us/library/k3677y81%28VS.71%29.aspx

编辑2:好的,现在,据我所知,你有静态和动态的程序集,静态存在于磁盘上,dyanmic是在飞行/按需创建的。 其次,您有可执行程序集,它们是我们的应用程序,例如helloworld.exe等控制台应用程序。

2 个答案:

答案 0 :(得分:2)

我从来没有听说过可执行文件或类库的术语“静态组装”。基本上,.NET程序集可以有一个入口点。具有入口点并且可以直接从操作系统shell(或CLI运行时,更准确)执行的那些是“.exe”文件和那些没有入口点并且仅用作支持的文件其他应用程序的库存储为“.dll”文件。

更新

查看您提供的参考资料,很明显“静态装配”意味着什么:

  

装配体可以是静态的或动态的。静态程序集可以包括.NET Framework类型(接口和类),以及程序集的资源(位图,JPEG文件,资源文件等)。静态程序集以可移植可执行(PE)文件的形式存储在磁盘上。您还可以使用.NET Framework创建动态程序集,这些程序集直接从内存运行,并且在执行之前不会保存到磁盘。您可以在执行后将动态程序集保存到磁盘。

MSDN文章调用存储为磁盘“静态程序集”上的文件的程序集,而不是某些代码(例如System.Reflection.Emit命名空间中的类)在运行时生成的“动态程序集”。它们是DLL还是EXE并不重要(两种文件类型都有可移植可执行(PE)头,以及CLR头)。唯一重要的是它们不是动态生成的(因此称为“静态”)并且先前存储在磁盘上。在动态生成的程序集的上下文之外,很少使用术语“静态程序集”。

答案 1 :(得分:1)

.NET世界中的差异非常小。 .exe只是一个使用/ target:winexe编译器选项编译的程序集,并且在其中一种类型中包含静态Main()方法。与使用/ target:library选项编译的DLL类型的程序集相反。

对于.exe来说,有一个入口点非常重要,这就是程序开始执行的地方。每个Windows程序都以这种方式启动。您只是在ASP.NET应用程序中看不到它,运行代码的.exe是iis.exe。

为了让您更加困惑,在.NET中编译为.exe的程序集与.dll一样。您只需在代码中使用Assembly.LoadFrom(),就可以访问.exe模块中的所有类型,就像在.dll模块中一样。

关键是如果CLR不是由其他可执行进程托管,如ASP.NET或SQL服务器或MMC或利用CorBindToRuntimeEx()的无数程序,您需要告诉.NET您的位置代码开始执行。它主要从Main()开始。