如何为使用ilasm生成的Interop DLL设置文件版本

时间:2013-11-15 01:22:23

标签: c# .net com interop com-interop

我们有几个C#项目通过COM Interop使用传统的COM DLL。

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

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

  1. tlbimp - 使用强名称密钥(/ keyfile参数)创建Interop * DLL
  2. ildasm - 从Interop * DLL生成中间语言(IL)
  3. 手动更改感兴趣的IL中的方法/参数
  4. ilasm - 使用与步骤1中相同的强密钥(/ key参数)重新组装DLL(/ dll参数)。
  5. 然后添加生成的DLL作为对各种C#项目的引用。 此DLL没有与之关联的文件版本信息,即使用“文件属性/详细信息”选项卡时。

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

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

    非常感谢!

1 个答案:

答案 0 :(得分: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