我们有几个 C# 项目通过 COM 互操作使用旧版 COM DLL。
为了正确使用 COM DLL 的某些方法,我们被迫执行手动中间语言 (IL) 修改,首先将 DLL 反汇编为 IL,对其进行修改,然后重新组装 DLL。这是一个一次性的过程,即 COM DLL 不会改变。
以下是所执行步骤的高级描述:
- tlbimp - 使用强名称密钥(/keyfile 参数)创建 Interop*DLL
- ildasm - 从 Interop*DLL 生成中间语言 (IL)
- 手动更改感兴趣的 IL 中的方法/参数
- ilasm - 使用与步骤 1 中相同的强密钥(/key 参数)重新组装 DLL(/dll 参数)。
然后将生成的 DLL 添加为对各种 C# 项目的引用。此 DLL 没有与之关联的文件版本信息,即,当使用文件属性/详细信息选项卡时。
我们希望能够设置 DLL 的文件版本。使用外部实用程序或手动方法(从 Windows 资源管理器/属性/详细信息选项卡)执行此操作的任何尝试都会使 DLL 无法通过文件的先前签名版本。
这是我们感兴趣的纯文件版本,与 COM/Interop/etc 无关。理想情况下,文件版本应该在使用 ilasm 从 IL 重新组装 DLL 的过程中设置。
非常感谢!