3

我们有几个 C# 项目通过 COM 互操作使用旧版 COM DLL。

为了正确使用 COM DLL 的某些方法,我们被迫执行手动中间语言 (IL) 修改,首先将 DLL 反汇编为 IL,对其进行修改,然后重新组装 DLL。这是一个一次性的过程,即 COM DLL 不会改变。

以下是所执行步骤的高级描述:

  1. tlbimp - 使用强名称密钥(/keyfile 参数)创建 Interop*DLL
  2. ildasm - 从 Interop*DLL 生成中间语言 (IL)
  3. 手动更改感兴趣的 IL 中的方法/参数
  4. ilasm - 使用与步骤 1 中相同的强密钥(/key 参数)重新组装 DLL(/dll 参数)。

然后将生成的 DLL 添加为对各种 C# 项目的引用。此 DLL 没有与之关联的文件版本信息,即,当使用文件属性/详细信息选项卡时。

我们希望能够设置 DLL 的文件版本。使用外部实用程序或手动方法(从 Windows 资源管理器/属性/详细信息选项卡)执行此操作的任何尝试都会使 DLL 无法通过文件的先前签名版本。

这是我们感兴趣的纯文件版本,与 COM/Interop/etc 无关。理想情况下,文件版本应该在使用 ilasm 从 IL 重新组装 DLL 的过程中设置。

非常感谢!

4

1 回答 1

6

ilasm 实用程序有一个/resource选项,允许使用版本信息指定资源。

下面是为生成的(重新组装的)DLL 设置文件版本的新命令示例:

ilasm.exe Interop.filename.il /dll /key=snkey.snk /resource:Interop.filename.res

可以在此处找到 ilasm.exe 的 MSDN 文档:

http://msdn.microsoft.com/en-us/library/496e4ekx(v=vs.110).aspx

于 2013-11-15T14:03:53.043 回答