c# - 在构建 dll 后更新 DLL 元数据

标签 c# dll

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

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

最佳答案

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

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

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

关于c# - 在构建 dll 后更新 DLL 元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14710412/

相关文章:

c# - ReSharper 为 lambda 表达式中的变量名称提供 "@"前缀

c# - ConfigureAwait(false) 仍然死锁

C++ lib 导入工作,除了两个构造函数

c# - 如何在运行应用程序时加载外部 DLL?

wpf - 为什么我在尝试添加引用时会看到 "Unable to emit assembly: Referenced assembly ... does not have a strong name"?

c# - 通过 boundfield 将 DBCONTEXT 绑定(bind)到 gridview

c# - 来自预定义模板的多页 PDF 文档

c++ - 与DLL混淆。没有 .lib 或 .h

.net - 从哪里获得 .net 的 apache poi 端口

c# - 在 C# 中检查是否为字符串格式的条件