使用Cecil在程序集中添加全局自定义属性

时间:2017-06-07 18:18:28

标签: c# mono assemblies mono.cecil

我有这个属性类:

[AttributeUsage(AttributeTargets.Assembly)]
public class PostProcessedAssemblyAttribute : Attribute
{
}

然后写了这段代码:

var moduleG = assembly.MainModule;

            var attributeConstructor =
                    moduleG.ImportReference(
                        typeof(PostProcessedAssemblyAttribute).GetConstructor(Type.EmptyTypes));
            var attribute = new CustomAttribute(attributeConstructor);
            assembly.CustomAttributes.Add(attribute);

 assembly.Write(assemblyPath, writerParameters);

如果我回读了程序集,我希望该属性存在,但事实并非如此。

我不是100%肯定我在做什么,所以我肯定做错了(例如我不确定从主模块导入属性是否正确),你能指出问题所在吗?

我只需要将程序集标记为已处理。

1 个答案:

答案 0 :(得分:0)

代码确实有用,我只是错误地使用assembly.CustomAttributes.Contains查找属性,而这些属性根本无法工作。最后我解决了它从实际的Type创建一个TypeReference并检查CustomAttribute.AttributeType.FullName对我需要检查的TypeReference的FullName。