2008-11-21 52 views
9

对于实际的.NET程序集名称是否应包含代码的版本号(例如CodeName02.exe或CompanyName.CodeName02.dll),我们目前对内部存在争议。有没有人知道像微软这样的权威来源提供有关这个问题的指导?.NET程序集名称是否应包含版本号?

回答

12

这是Properties/AssemblyInfo.cs文件的用途是什么。

有该文件,该文件版本和程序集版本中的两个版本:

[assembly: AssemblyVersion("1.1.0.256"] 
[assembly: AssemblyFileVersion("1.1.0.256")] 

一旦这些设置,你可以用它们来追踪你的二进制文件的版本。在浏览器中右键单击 - >属性即可轻松查看。

Microsoft的应用程序(和操作系统)中包含的任何dll或exe名称都不使用该约定。

其他系统将使用这些数字来解决依赖关系并验证版本。例如,MSI系统将根据版本属性更新二进制文件。

+0

每次构建后如何自动增加构建编号?或者我必须手动打开这个文件并每次更改maj,min,内部版本号? – 2008-11-21 21:39:04

+0

使用*而不是数字,构建将自动增加数值。 1.1。* – 2008-11-21 21:57:30

3

我没有意识到任何权威性,但在我看来,使用一致的名称将简化从安装脚本到文档的所有过程。考虑到可以将版本作为元数据存储在文件上,我不知道为什么需要文件名。为什么要为解决不同名称文件造成的麻烦而烦恼?

0

版本信息可以包含在程序集信息文件,然后可以通过反射等进行查询

有些厂商在名称中包含的版本号,以使其更容易一眼就看什么。 Microsoft dll名称不包含框架目录中的版本号。

3

只是看看.NET框架或任何其他微软产品的事情。将版本号作为程序集名称的一部分听起来像是一个糟糕的主意。

在程序集的元数据部分有这个(和其他信息)的地方。 (AssemblyInfo.cs)

可以在Windows资源管理器(属性对话框,状态栏,工具提示 - 它们都显示此信息)中查看此信息。

0

由于版本可以设置为属性不是这个半冗余?

我还会去的肢体,并建议MS没有一个标准给予快速浏览一下他们的DLL名称:user32.dll中,tcpmon.dll,WINSOCK.DLL等

+0

这些不是.NET组件 - 它们是本机win32并受“DLL地狱”影响。在.NET中,gac用于提供版本控制并允许后续的DLL具有相同的物理名称。 – x0n 2008-11-24 15:50:17

+0

我不确定引用20年的软件考古学是非常相关的!那个时代的名字必须是8.3,这往往是主流辩论。 – 2008-11-24 15:51:35

1

我觉得把一个DLL的文件名的版本号的主要思想是从DLL地狱带过来的,具有DLL的多个版本,其中,所有具有相同名称引起的问题(的即其实际版本你有一个DLL,它是否具有所需的功能等)。

与更传统的C/C++ DLL文件相比,.NET Framework处理完全不同的依赖关系,可能在GAC中有多个版本的库,主要是因为GAC是一个“假”文件夹,链接到文件系统上的其他文件,除了能够将程序集包含在可执行文件安装(相同的文件夹部署等)之外。

2

我知道DevExpress website使用版本指标作为其组件名称的一部分,如XtraEditors8.2.dll。我想原因是你想能够有位于同一目录中的程序集的多个版本。例如,我们有大约15个作为同一个shell /客户端的一部分分发的smartclient。每个smartclient可以有不同版本的DevExpress控件,因此我们需要能够在同一个目录中存在XtraEditors7.1.dll和XtraEditors8.2。

我会说,如果你有可重用模块的依赖关系的公用库,并且可以存在多个版本1.0,1.1,1.2等,那么这将是一个有效的参数,版本号可以包含在名称中以避免碰撞。鉴于共同的库存不在GAC中。

0

Microsoft使用后缀32来表示32位DLL版本,以便这些DLL可以与现有的16位DLL文件共存。

相关问题