繁体   English   中英

将资源添加到现有程序集

[英]Adding resources to an existing assembly

我有一个COM Interop DLL,我使用tlbimp从现有的COM DLL自动生成。 我需要的是将详细信息添加到DLL的属性对话框中,以获取文件版本,版权信息等。

我找到了一些使用AssemblyBuilder.SetCustomAttribute() API动态设置AssemblyCopyrightAttribute等的示例代码

但是,正在使用的AssemblyBuilder实例来自AppDomain.CurrentDomain.DefineDynamicAssembly() ,它似乎只创建程序集。 (实际上,每当我使用我的DLL名称尝试该代码时,它会删除我的DLL并创建一个新的。)

有没有办法为现有的程序集获取AssemblyBuilder的实例?

不,你从根本上寻找错误的解决方案。 您在资源管理器的“详细信息”选项卡中看到的实际上是一个非托管资源。 C#编译器从程序集属性(/ win32res编译器选项)自动生成一个,当然这在创建互操作程序集时不会发生。 或者就此而言,尝试使用AssemblyBuilder创建一个。

要使其工作,首先必须使用ildasm.exe / out反汇编互操作库。 接下来,您必须创建一个版本资源,最好用C ++项目完成。 使用资源编辑器添加版本资源。 构建完成后,您将获得一个.res文件。 然后使用ilasm.exe重新创建互操作库,使用/ resource选项获取嵌入的.res文件。

我给你的是每小时100英里的版本,这很难自动化。

没有必要跳过汉斯提到的许多箍,只是为了向PE文件添加非托管资源。 在内存中创建一个版本资源 - 这不是很困难 - 并使用Win32 BeginUpdateResource &co。 将此资源添加到tlbimp生成的.exe文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM