【发布时间】:2018-12-31 16:05:23
【问题描述】:
我有一个由我构建的 .NET 程序集,但希望能够在 运行时 用一些次要但任意的属性更改文件重写 .DLL。具体来说,我希望能够更改类的属性的属性,以便我可以根据情况自定义二进制文件。
为了说明,我想达到编辑正在生成的程序集的效果
[SomeAttribute("Name")]
public class MyClass{
...
使得新程序集在功能上与
[SomeAttribute("Custom Name")]
public class MyClass{
...
而且这个“自定义名称”可以是任何东西(在运行时确定)。这可以在运行时执行吗?
实际的.DLL需要修改的原因是因为它会被一个无法确定运行时信息的单独进程加载(我不控制这个进程)。
到目前为止的实验表明,如果新的“自定义名称”的长度与原始名称相同,则它似乎可以工作,但不是其他情况(即使您编辑了指定长度的前一个字节;大概有偏移量存储在文件)。
编辑:忘了说,解决方案也需要在 .NET 2 框架下。
【问题讨论】:
-
我会推荐一种替代方法,您可以在其中创建新程序集并在该程序集中创建
MyClass的新子类以及属性名称的更改。您当前的方法可能不被允许,防病毒软件可能会将其检测为有害行为。 -
@AkashKava 我不是必须手动重建程序集,然后再使用里面的子类吗?我需要新名称是任意的;它不能预先制作。我目前并不担心防病毒,因为我可以完全控制原始程序集(它不是系统程序集或任何东西)
-
我不记得确切的细节,但如果您使用签名的程序集 - 在生产环境中您应该这样做 - 那么您甚至无法在不使程序集失效的情况下更改一点。
-
@Enigmativity 是的,这是正确的,但现在这不是问题
-
要修改它,Fody 和 Mono.Cecil 可能是你的工具。一般来说,您尝试做的是一个坏主意。可能是XY problem
标签: c# .net-assembly .net-2.0