了解dll以及它们在Visual Studio中的工作方式

时间:2008-10-03 23:19:41

标签: .net visual-studio dll

有没有人在dll上有很好的资源以及它们在Visual Studio中的使用/生成方式?我特别朦胧的一些问题是:

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

欢迎任何其他提示。

2 个答案:

答案 0 :(得分:10)

.NET DLL的

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

.refresh文件

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

版本号

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

[assembly:AssemblyVersion(“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引用,那么您将无法获得项目作为解决方案一部分的好处,并且能够进入解决方案中的代码。

答案 1 :(得分:5)

有关某些背景,请参阅DLL information上的问题。

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

[assembly: AssemblyFileVersion("1.0.0.0")]

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