在DLL已生成后更新DLL metdata

本文关键字:DLL 更新 metdata | 更新日期: 2023-09-27 17:57:39

我很好奇是否有一种方法可以在编译后更改托管DLL的metdata(如产品名称)。我知道这个问题:在编译的.NET程序集中更改程序集版本,他们提到使用ILMerge通过将IL合并到其自身的克隆中来更新版本号,但当查看ILMerge命令行标志时,我认为ILMerge不支持其他属性。

我想这样做的原因是我有一个部署结构,其中我有一次构建到多个客户端。我想在打包过程中用客户端名称标记已部署的dll,这样我就可以判断dll是否在客户端之间复制。

在DLL已生成后更新DLL metdata

我之前就想过这个问题。我认为,由于程序集非常容易使用,因此您可以将用户生成的内容存储在程序即将用完的程序集中,这似乎是合乎逻辑的。

这一推理的问题在于,这意味着有人可以在最终用户没有意识到的情况下有效地更改DLL的内容(这就是病毒的工作原理)——正如你可以想象的那样,这是一个巨大的安全问题。如果程序集经过数字签名,这样你就可以知道是否/何时有人篡改了程序集,那么它会更加安全/可靠。

但是,如果您想在编译程序集之前通过进行小的更改,您可以尝试查看CodeDom(用于更改代码结构)或Reflection.Emit(用于直接使用"IL"编译程序集)。