我正在使用System.Reflection.Emit创建一个新程序集A,该程序集调用现有程序集B中的方法。
B中的方法带有一些自定义属性,我想通过编程方式删除它们。我无法访问生成B的源代码。
我在.NET框架中找不到文档化的方法来完成这个任务。有什么建议吗?
非常感谢!
B中的方法带有一些自定义属性,我想通过编程方式删除它们。我无法访问生成B的源代码。
我在.NET框架中找不到文档化的方法来完成这个任务。有什么建议吗?
非常感谢!
它使用dnlib来移除属性。Remove-AssemblySuppressIldasmAttribute
从.NET程序集中删除SuppressIldasmAttribute属性。
我不相信这是可能的。属性被编译成IL代码。尝试以编程方式删除它们就像尝试以编程方式删除方法或属性一样。
你可以使用Mono.Cecil编辑现有的程序集。
例如,要删除SuppressIldasmAttribute
:
public static void RemoveSuppressIldasmAttribute(string input, string output)
{
AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(input);
foreach (CustomAttribute attribute in assembly.CustomAttributes)
{
if (attribute.Constructor.DeclaringType.Name == "SuppressIldasmAttribute")
{
assembly.CustomAttributes.Remove(attribute);
}
}
assembly.Write(output);
}