2013-02-05 38 views
2

我很好奇,如果有一種方法來更改託管DLL的metdata(如產品名稱)後,它已被編譯。我知道在這個問題中:Change Assembly Version in a compiled .NET assembly,他們提到使用ILMerge通過將IL合併到自身的克隆來更新版本號,但是在查看ILMerge命令行標誌時,我不認爲ILMerge支持其他屬性。更新DLL metdata後DLL已經建成

我想要做的,這是我有一個部署結構在那裏我有一個構建將很多客戶的原因。我想在打包時使用客戶端名稱標記已部署的dll,這樣我就可以知道是否在客戶端之間複製了dll。

回答

1

我想過我自己之前這個問題。我想,因爲程序集非常易於使用,所以您可能能夠將用戶生成的內容存儲在程序即將用完的程序集內似乎是合乎邏輯的。

這種推理的問題在於,這意味着某人可以在最終用戶沒有意識到的情況下有效地改變DLL的內容(這是多少病毒的工作原理) - 正如您可以想象的那樣,這是一個巨大的安全問題。如果組件經過數字簽名,它可以更安全/可靠,以便您知道是否/何時有人篡改了裝配。

但是,如果您想對進行細微更改,但是可以嘗試查看CodeDom(用於更改代碼結構)或Reflection.Emit(用於直接使用構建程序集「IL」)。

+0

完全有效的分數。你有什麼想法,我怎麼可以去做這種跟蹤,然後除了DLL操作? – devshorts

+0

哦,你仍然可以進行跟蹤,但是在創建之前必須將任何跟蹤信息插入到dll中。 CodeDom會讓你把它放到代碼中,並且(我認爲)可能是最簡單的方法。 – sircodesalot