[英]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.