如何更改类型的属性?

时间:2015-10-19 18:22:05

标签: c# reflection .net-assembly

如何修改附加到某个TypeAttributes的{​​{1}}?

我想通过应用Type标志来修改类型并使其抽象化,我该怎么做?

我确定我需要在某个地方调用CLR,但是我无法追踪它从哪里得到这些信息,它似乎是一个无休止的分层方法系统,可以调用其他方法。

1 个答案:

答案 0 :(得分:0)

您可以使用Mono.Cecil等库以编程方式更改类型。 假设你有一个名为" Test"在名为" ExistingAssembly.dll"的程序集中你想转课#34;测试"进入抽象类。 你现在需要做的就是:

void Main(){
    //This is the existing assembly containing the type that you wish to modify
    var assemblyFile = @"C:\temp\ExistingAssembly.dll";

    var ass = Mono.Cecil.AssemblyDefinition.ReadAssembly(assemblyFile);
    var type = ass.MainModule.GetTypes().First(t => t.Name == "Test");
    //Make the type an Abstract type (class)
    type.IsAbstract = true;

    //Finally save the modified assembly into a new file
    ass.Write(@"C:\temp\ModifiedAssembly.dll");

    //The type "Test" in the above "ModifiedAssembly.dll" is now an abstract class.
}

// This is the Type that you wish to turn into an Abstract Class
public class Test {
    public string DummyMethod(){
        return "Dummy Return";
    }
}

你可以从这里获得Mono.Cecil程序集(Nuget): https://www.nuget.org/packages/Mono.Cecil/