簡體   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