Laden...

Mono.Cecil - Probleme beim Debuggen

1 Antworten
718 Aufrufe
Letzter Beitrag: vor 15 Jahren
Mono.Cecil - Probleme beim Debuggen

Hallo,

in letzter Zeit habe ich recht viel mit WPF und dem MVVM-Pattern zu tun, was mich daran stört ist die Menge an Boilerplatecode wie z. B. die INotifyPropertyChanged Geschichte.

Um das zu minimieren habe ich ein bisschen mit Mono.Cecil rumgespielt und mir eine kleine Konsolenanwendung geschrieben. Diese Anwendung schreibt die WPF Assembly so um, dass jeder public Setter INotifyPropertyChanged benutzt und für jede public void Methode ein ICommand Field und Property angelegt wird, das Field wird dann im Konstruktor initialisiert. (Die ICommand Implementierung ist eine Art RelayCommand / DelegateCommand).

Also kurzes Code Beispiel:


// Was man vorher selbst schreiben musste
public class AViewModel: AbstractViewModel
{
    private string _name;
    private readonly ICommand _doSomethingCommand;

    public AViewModel()
    {
        _doSomethingCommand = new Command(DoSomething, CanDoSomething);
    }

    public ICommand DoSomethingCommand
    {
        get { return _doSomethingCommand; }
    }

    public string Name
    {
        get { return _name; }
        set
        {
            if (_name == value)
            {
                return;
            }

            _name = value;

            FirePropertyChanged("Name");
        }
    }

    public void DoSomething()
    {
        
    }

    public bool CanDoSomething()
    {
        return true;
    }
}


// Was man jetzt schreiben muss

public class AViewModel: AbstractViewModel
{
    public string Name { get; set; }

    public void DoSomething()
    {
        
    }

    public bool CanDoSomething()
    {
        return true;
    }
}

Das funktioniert auch alles so weit. Das einzige Problem ist: ich kann keine Breakpoints mehr setzen. Die PDB und Dll/Exe sind scheinbar nicht mehr synchron bzw. in der umgeschriebenden PDB fehlt etwas. Die Pdb der Beispielanwendung hat vorher 18kb und nachher nur noch 12.

Muss man mehr machen als:


var assembly = AssemblyFactory.GetAssembly(Path);
assembly.MainModule.LoadSymbols();

// Änderungen

assembly.MainModule.SaveSymbols();
AssemblyFactory.SaveAssembly(assembly, Path);

Bisher habe ich herausgefunden, dass es so bei einigen funktioniert bei anderen aber nicht.

Hätte hier noch jemand einen Tipp was ich probieren könnte oder evtl. eine Alternative zu Mono.Cecil (wenn möglich nicht PostSharp)?

Wäre so etwas z. B. mit LinFu möglich (da es ja auf Cecil basiert) und funktioniert dort das Debuggen?