2017-06-07 7 views
1

ich dieses Attribut bekam Klasse haben Hinzufügen:eine globale benutzerdefinierte Attribut in der Versammlung mit Cecil

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

und schrieb dann diesen Code:

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); 

wenn ich die Versammlung zurückgelesen, erwarte ich, dass die Attribut, um anwesend zu sein, aber es ist nicht.

Ich bin mir nicht 100% sicher, was ich mache, also mache ich sicher etwas falsch (zum Beispiel bin ich nicht sicher, ob das Importieren des Attributs aus dem Hauptmodul korrekt ist), können Sie bitte darauf hinweisen, wo das Problem liegt ?

Ich brauche dies nur, um eine Baugruppe als bearbeitet zu markieren.

+0

Der Code hier funktioniert gut für mich. Könnten Sie ein vollständigeres Beispiel hinzufügen, das die Beziehungen zwischen den Assemblies hier zeigt und wie Sie danach die Assembly lesen? – svick

Antwort

0

Der Code funktioniert in der Tat, es war mein Fehler nach dem Attribut nur mit Assembly.CustomAttributes.Contains zu suchen, die überhaupt nicht funktionieren kann. Schließlich löste ich es, eine TypeReference vom tatsächlichen Typ zu schaffen und das CustomAttribute.AttributeType.FullName gegen das FullName des TypeReference zu überprüfen, das ich überprüfen muss.

Verwandte Themen