6

有没有人有关于 dll 的良好资源以及它们是如何在 Visual Studio 中使用/生成的?我比较模糊的几个问题具体是:

  • 刷新文件的工作原理
  • dll版本号是如何生成的
  • 按项目添加引用与浏览特定dll之间的区别

也欢迎任何其他提示。

4

2 回答 2

10

.NET DLL

.NET DLL 的通用术语是程序集。它们是单个部署的原子单元,由一个或多个 CLR“模块”组成(对于大多数开发人员来说,通常只有一个,除非他们正在组合来自两种或多种语言的编译器输出)。程序集包含 CIL 代码和 CLR 元数据,例如程序集清单。

.refresh 文件

.refresh 文件是简单的文本文件,它告诉 VS 在哪里检查引用的 dll 的新版本。它们用于基于文件的 Web 项目,其中没有项目文件来存储此信息。

版本号

.NET 程序集版本号由程序集范围属性 AssemblyVersion 生成,该属性通常位于名为“AssemblyInfo.cs”的源文件中(从 VS2005 开始,位于名为“Properties”的项目文件夹下)。版本号由 major.minor.build.revision 组成,例如 -

[组装:组装版本(“1.0.0.0”)]

AssemblyVersion 用作程序集标识的一部分(即以其强名称),并在绑定过程和版本策略决策期间发挥重要作用。

例如,如果我在 GAC 中有两个同名的程序集,则 AssemblyVersion 属性将区分它们以加载特定版本的程序集。

AssemblyVersion 编号可以手动固定和递增,或者您可以通过指定允许编译器为您生成构建和修订编号:

[assembly: AssemblyVersion("1.0. *")] - 生成版本号和修订号
[assembly: AssemblyVersion("1.0.0. *")] - 生成修订号

如果 AssemblyVersion 属性不存在,则版本号默认为“0.0.0.0”。

AssemblyVersion 属性的值成为程序集清单的一部分,而 AssemblyFileVersion 属性值不会。

AssemblyFileVersion 属性用于将 Win32 文件版本嵌入到 DLL 中。如果不存在,则使用 AssemblyVersion。它与 .NET 程序集加载器/解析器如何选择要加载的程序集版本无关。

项目参考与 DLL 浏览

如果您要添加项目引用,则意味着引用的项目将成为您的解决方案的一部分。通过能够直接进入您引用的项目代码,这使得调试变得更简单。如果您只添加一个 dll 引用,那么您将无法享受项目作为解决方案的一部分以及能够进入解决方案中的代码的好处。

于 2008-10-04T03:16:36.090 回答
5

有关一些背景信息,请参阅有关DLL 信息的问题。

非托管 DLL 的版本号存储在 DLL 的 rc 文件中,与 exe 相同。对于托管 DLL,我相信它使用 AssemblyFileInfo 属性,通常在 AssemblyInfo.cs 中用于 Visual Studio 生成的项目:

[assembly: AssemblyFileVersion("1.0.0.0")]

如果您按项目添加引用,那么 VS 将能够将引用程序集的正确风格(调试/发布)复制到您的输出目录。它还可以使用此信息在项目之间隐式添加依赖关系,以便以正确的顺序构建。

于 2008-10-03T23:30:20.947 回答