【问题标题】:Assemblies vs Class Libraries (.NET)程序集与类库 (.NET)
【发布时间】:2009-12-11 14:24:20
【问题描述】:

谁能指出在ASP.NET 的“上下文”中使用程序集的优势。

据我了解,程序集作为可执行文件运行,具有单一入口点,并且可以在应用程序域中运行,但我在网络上找到的合适示例很少。

【问题讨论】:

    标签: .net assemblies


    【解决方案1】:

    程序集不仅仅是一个可执行文件...一个程序集本质上是一个 .NET 库,可能有一个可执行入口点...

    Wikipedia article with description of assemblies第一段:

    在 Microsoft .NET 框架中,一个 程序集是部分编译的代码 用于部署的库, 版本控制和安全性。那里有两个 类型:进程程序集 (EXE) 和 库程序集 (DLL)。一个过程 装配代表一个过程 将使用库中定义的类 组件。 .NET 程序集包含 CIL 中的代码,通常是 从 .NET 语言生成,以及 然后编译成机器语言 由 CLR 即时运行 编译器。一个程序集可以包括 一个或多个文件。代码文件是 称为模块。一个组件可以 包含多个代码模块和 因为可以使用不同的 创建代码模块的语言 技术上可以使用几个 不同的语言来创建 部件。然而,Visual Studio 确实如此 不支持使用不同的语言 在一个程序集中。

    【讨论】:

    • 所以库是程序集的子集?
    【解决方案2】:

    程序集并不总是可执行的。大多数人会将它们定义为以单个 DLL 或 EXE 文件形式呈现的类模块的集合。最接近它们的是 Java JAR。

    它们有元数据(参见http://en.wikipedia.org/wiki/.NET_metadata),其中包含一堆信息,例如

    • 版本
    • 方法和类型

    它们还有一个清单,它是此元数据的一部分(请参阅http://msdn.microsoft.com/en-us/library/1w45z383.aspx)。

    您可以将程序集注册到全局程序集缓存 (GAC) 中(请参阅http://en.wikipedia.org/wiki/Global_Assembly_Cache),并且您可以将它们提供给机器上的所有其他程序。 (在 Visual Studio 中,您使用“添加引用”并浏览 .Net 选项卡,您正在查看 GAC 中的程序集列表)。

    您不必在 GAC 中添加它们,您可以直接引用私有程序集,但在 GAC 中注册它们会使它们在计算机上全局可用。

    此链接包含有关程序集的合理信息:

    【讨论】:

      【解决方案3】:

      这个问题没有多大意义。程序集包含类库,它不是非此即彼的东西。即使您只有 aspx 文件,当有人第一次访问页面时,ASP.Net 也会将其编译成一个类,然后即时编译成一个程序集。

      【讨论】:

        【解决方案4】:

        @maxp,您是问将类作为 .cs 文件包含在项目中还是作为已编译的 .dll 包含在引用中更好?

        我过去常常将常用函数保存在类文件 (.cs) 中,并将它们包含在我正在从事的任何项目中。这些类在源代码控制下运行,因此我只要确保在创建新项目时获得最新版本即可。但是最近,我开始编译它们并在 GAC 中注册它们。这有助于减少并非每个人都真正知道给定项目中包含哪个版本的类的头痛。如果您对课程进行了更改,只需在 GAC 重新注册它,您的所有应用都会更新并使用相同的版本。

        我遇到的唯一真正的缺点是如果您尝试调试并逐步执行逻辑。在编译并放入 GAC 之前,请确保您的类是可靠的。

        希望这有助于回答您的问题。

        【讨论】:

        • 不是真的,但感谢您的回复。我们解决您的“最新版本代码”问题的解决方案是拥有一个包含所有项目(包括类库)的大型解决方案。然后我们为每个项目添加对类库的引用,因此每次新编译时,所有项目都会更新为最新的库。
        猜你喜欢
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多