C# 在已生成DLL后更新DLL metdata

C# 在已生成DLL后更新DLL metdata,c#,dll,C#,Dll,我很好奇是否有办法在编译托管DLL后更改其metdata(如产品名称)。我知道在这个问题中:,他们提到使用ILMerge通过将IL合并到自身的克隆来更新版本号,但是当查看ILMerge命令行标志时,我认为ILMerge不支持其他属性 我想这样做的原因是我有一个部署结构,其中我有一个构建到多个客户端。我想在打包过程中用客户端名称标记已部署的dll,这样我就可以知道是否在客户端之间复制了dll 我以前就考虑过这个问题。我认为,由于程序集非常易于使用,因此您可以将用户生成的内容存储在程序即将用完的程序

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


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

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

这条推理路线的问题是,这意味着有人可以在最终用户没有意识到的情况下有效地更改DLL的内容(这就是有多少病毒在工作)-正如您可以想象的,这是一个巨大的安全问题。如果对程序集进行数字签名,以便您知道是否/何时有人篡改了程序集,则会更加安全/可靠


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

完全有效。除了dll操作之外,你知道我如何进行这种跟踪吗?哦,你仍然可以进行跟踪,但是在构建dll之前,必须将任何跟踪信息插入到dll中。CodeDom可以让您将其放入代码中,而且(我认为)可能是最简单的方法。