我有一个COM Interop DLL,我使用tlbimp
从现有的COM DLL自动生成。我需要的是将详细信息添加到DLL的属性对话框中以获取文件版本,版权信息等。
我发现some sample code使用AssemblyBuilder.SetCustomAttribute()
API来动态设置AssemblyCopyrightAttribute
等。
但是,正在使用的AssemblyBuilder
实例来自AppDomain.CurrentDomain.DefineDynamicAssembly()
,它似乎只会创建新程序集。 (实际上,每当我使用我的DLL名称尝试该代码时,它会删除我的DLL并创建一个新的。)
有没有办法为现有的程序集获取AssemblyBuilder
的实例?
答案 0 :(得分:2)
不,你从根本上寻找错误的解决方案。您在资源管理器的“详细信息”选项卡中看到的实际上是非托管资源。 C#编译器从程序集属性(/ win32res编译器选项)自动生成一个,当然这在创建互操作程序集时不会发生。或者就此而言,尝试使用AssemblyBuilder创建一个。
要使其工作,首先必须使用ildasm.exe / out反汇编互操作库。接下来,您必须创建一个版本资源,最好用C ++项目完成。使用资源编辑器添加版本资源。构建完成后,您将获得一个.res文件。然后使用ilasm.exe重新创建互操作库,使用/ resource选项获取嵌入的.res文件。
我给你的是每小时100英里的版本,这很难实现自动化。
答案 1 :(得分:0)
没有必要跳过汉斯提到的许多箍,只是为了向PE文件添加非托管资源。创建版本资源in-memory - 这不是很困难 - 并使用Win32 BeginUpdateResource
& co。将此资源添加到tlbimp
生成的.exe文件中。