Visual Studio和.DLL版本号

3
我正在尝试确定我在Win XP Pro笔记本电脑上安装了哪个SAPI版本。我正在将sapi.dll添加到我的项目中:项目>添加引用>COM: Microsoft Speech Object Library 5.0 C:\Program Files\Common Files\Microsoft Shared\Speech\sapi.dll。如果我打开Windows资源管理器并导航到C:\Program Files\Common Files\Microsoft Shared\Speech\sapi.dll,它显示的版本号为5.1.4111.0。由Visual Studio创建的Interop文件(Interop.SpeechLib.dll)显示的版本号为5.0.0.0。如果我转到项目>添加引用>浏览并手动浏览dll,没有任何区别。虽然物理dll显示版本5.1.4111.0,但在Visual Studio中的所有内容都变成版本5.0.0.0。为什么会有这样的差异呢?谢谢。
1个回答

2
因为类型库版本与文件版本无关。 类型库版本描述API的声明接口。 当进行破坏性更改需要重新编译程序时,将增加库版本。
文件版本是实现细节。 在XP上可能有多个版本,例如针对不同服务包或安全补丁的修订版。 这里的“5.1”表示Windows版本号。 4.0 = Windows NT,5.0 = Windows 2000,5.1 = XP,6.0 = Vista,6.1 = Windows 7。 文件版本的更改不需要重新编译程序。 您只关心库版本。

我不确定什么是“破坏性变更”。我已经对程序进行了一些小的更改并重新编译了它。然而,Interop库(Interop.SpeechLib.dll)仍然是版本号5.0.0.0,并且日期是我第一次创建引用时的日期。如果Interop库号与DLL版本号完全不同,为什么VS会以5.0.0.0开始呢?为什么不是1.0.0.0? 请原谅我的新手问题。 DLL和版本控制不是我的强项。 - mcu
Interop程序集版本号与COM类型库版本号相同。该类型库嵌入在sapi.dll中作为资源。如果您对COM不了解,这可能意义不大。在这里最好的做法是停止担心它,因为没有什么问题。 - Hans Passant
谢谢,现在更有意义了。 那么这是否意味着我已经安装了SAPI 5.1(根据DLL版本)? - mcu
谢谢提供链接。我只是想知道一般来说,我是否应该将DLL版本号作为API版本号。 - mcu
好的,我现在明白了。 嵌入在sapi.dll文件中的COM类型库版本为5.0.0.0,这意味着SAPI的版本是5.0。这正确吗? - mcu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接