在我的书“Pro C#2008和.NET 3.5平台”中,有一行文字让我感到困惑,在单文件程序集的上下文中。
在很多情况下,.NET程序集和二进制文件(* .dll或* .exe)之间存在简单的一对一关系。因此如果你是构建.NET * .dll,可以安全地考虑二进制和程序集是同一个。同样,如果要构建可执行桌面应用程序,* .exe可以简称为程序集本身
-Pro C#2008和.NET 3.5平台,Andrew Troelsen
这句话的第一句话搞砸了我的想法。我理解.NET单个文件程序集是一个或多个相关模块的逻辑分组,这些模块最初要部署并作为单个单元进行版本控制。在此程序集中,包含Windows / CLR标头,类型元数据,已编译的CIL和程序集清单。
在单个文件程序集的上下文中,我无法理解“.NET程序集与二进制文件(* .dll或* .exe)之间的一对一对应”是什么意思。
有人可以澄清上面指定的引用吗?
答案 0 :(得分:3)
这是一个由作者设计来掩盖他的屁股的蹩脚评论。但当他没有解释它意味着什么时,毫无意义。关于Visual Studio如何工作的心智模型是完整的,一个项目创建一个程序集。
但正如您所猜测的那样,CLR没有这个要求。可以从多个模块构建组件。重要的成分是C#编译器的/ target:module选项和将模块链接到程序集的al.exe工具。这些选项对Microsoft来说非常重要,这就是如何构建像mscorlib.dll这样的核心程序集。机器的灵魂,你不应该那么体面。
答案 1 :(得分:0)
这只是一个明确的问题。包含在单个二进制文件中的任何程序集都可以称为单个文件程序集。
简单地说 - 程序集可以包含在一个或多个二进制文件中。单个二进制文件中的程序集是单个文件程序集。
-foredecker
答案 2 :(得分:0)
我从未见过程序集跨越多个dll或exe文件。但是,您可以使用ILmerge将多个程序集合并为一个二进制文件。通常,您将在每个命名空间中看到一个程序集dll。
答案 3 :(得分:0)
我认为他所指的是“网站项目”将文件背后的单个代码编译成单独的二进制文件,但它们被视为同一“程序集”的一部分。您可以在windows \ Microsoft .net framework
下的临时位置查看这些文件