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

ale*_*exg 3 .net c# 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参数).

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

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

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

非常感谢!

ale*_*exg 6

ilasm实用程序有一个/ resource选项,允许用户指定具有版本信息的资源.

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

ilasm.exe Interop.filename.il /dll /key=snkey.snk /resource:Interop.filename.res
Run Code Online (Sandbox Code Playgroud)

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

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