.net 什么类型/名称空间应该';不能改名吗?
我是Cecil的新手,我创建了一个简单的测试。它将所有名称空间/类型重命名为随机字符串.net 什么类型/名称空间应该';不能改名吗?,.net,reflection,clr,mono.cecil,.net,Reflection,Clr,Mono.cecil,我是Cecil的新手,我创建了一个简单的测试。它将所有名称空间/类型重命名为随机字符串 var assembly = AssemblyDefinition.ReadAssembly(@"C:\somexe.exe"); foreach (var t in assembly.MainModule.Types) { t.Namespace = Guid.NewGuid().ToString(); t.Name = Guid.NewGuid().ToString();
var assembly = AssemblyDefinition.ReadAssembly(@"C:\somexe.exe");
foreach (var t in assembly.MainModule.Types) {
t.Namespace = Guid.NewGuid().ToString();
t.Name = Guid.NewGuid().ToString();
}
启动可执行文件后运行,但表单为空(它是winforms)
我以为CLR不在乎名字?我不应该重命名什么?或者我做错了什么?很多事情,特别是在winforms中,都依赖于反射。反射非常关心名字。这也可能与资源和不匹配的资源文件有关。此外,许多属性可能包含类型信息作为字符串,这可能会影响一些事情。序列化也是如此(尤其是二进制格式化程序)
但是,如果没有更多的上下文(主要是代码),我们只能猜测。我认为这是资源。资源名称必须与namespace.class名称匹配。那么属性呢?我也不应该重命名它们?@blez实际上,我指的是属性中的值;诸如TypeDescriptorAttribute等许多文件都可以选择将类型信息存储为文字字符串(而不是通过typeof)。如果该文字字符串不再与旧名称匹配。。。