Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von rollerfreak2
Thema: Attribute durch Interface erzwingen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi AlexDozer,

hier noch ein kleiner Tipp, das kann ich dir nur empfehlen mal anzuschauen. Ich glaub das ist genau das nachdem du suchst.

CustomAttributeIntroductionAspect

Thema: Attribute durch Interface erzwingen?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi AlexDozer,

ich denke das ist eine sehr gute Anwendung für AOP (z.B. PostSharp). Du könntest das also schon zur Compilezeit prüfen und sogar dynamisch das Attribut an Klassen adaptieren die das Interface implementieren aber nicht das Attribut gesetzt haben.

Thema: Ver- und Entschlüsselung funktioniert nicht
Am im Forum: Rund um die Programmierung

Schau dir das mal an, vielleicht hilft es. Unexplained CryptographicException

Thema: Server (Windows 7) / Client (WP7) bekommt keine Verbindung
Am im Forum: Netzwerktechnologien

Wo man Ihn startet solltest du aber wissen. Systemsteuerung => Verwaltung => Dienste. Du musst halt nur den Namen deines Dienstes kennen.

Thema: Design Frage zu FabrikMethode und Strategy-Pattern
Am im Forum: Rund um die Programmierung

Hallo zusammen,

danke für die Zahlreichen Antworten. Ich glaube ich werde mich für die Sache mit Reflection entscheiden, die herbivore beschrieben hat. Entweder via Attribut oder über alle Klassen die das entsprechende Interface implementieren. Dabei kann ich sicher sein, das es sich auf eine Assembly beschränkt. Dann brauch ich die Factory Methode nicht mehr anfassen sondern nur noch konkrete Strategien implementieren.

Thema: Design Frage zu FabrikMethode und Strategy-Pattern
Am im Forum: Rund um die Programmierung

Hallo gfoidl,

ich kenne das Visitor Pattern, jedoch denke ich hab ich dann auch das Problem dass das reine Hinzufügen eines neues Visitors reicht in meinem Falle dann dort auch nicht aus, oder irre ich mich?

Thema: Design Frage zu FabrikMethode und Strategy-Pattern
Am im Forum: Rund um die Programmierung

Hallo zusammen,

ich schildere mal kurz mein Design. Ich habe eine Struktur die Nodes enthält. Diese sind so aufgebaut wie ein Baum, daher eine Node hat einen Parent und n Childs usw. Nun muss jede Node einmal besucht werden um daran Algorithmen auszuführen. Dazu habe ich eine abstrakte Basisklasse bsp. AbstractStrategy von der ich dann konkrete Strategien ableite. Diese Strategien nehmen die Node und wenden darauf ihren Algorithmus an. Es ist auch möglich das mehrere Algorithmen pro Node angewendet werden müssen, die Reihenfolge spielt dabei keine Rolle. Dazu gibt es also eine Art Factory die zu einer bestimmten Node eine List<T> mit Strategien zurück liefert. Dazu gibt es am IStrategy Interface eine Methode bool IsRelevantForNode(INode).

Nun sollte der Code wie folgt aussehen.

(PseudoCode -> Strategies)


foreach (INode node in Nodes)
{
    IList<IStrategy> strategies = this.Factory.GetStrategies(node);
    foreach (IStrategy strategy in strategies)
    {
        strategy.Execute(node);
    }
}

(PseudoCode -> Factory)


public IList<IStrategy> GetStrategies(INode node)
{
    List<IStrategy> list = new List<IStrategy>();
    foreach (IStrategy strategy in ListOfStrategies)
    {
        if (strategy.IsRelevantForNode(node))
        {
             list.Add(Strategy);
        }
    }

    return list;
}

Das Problem ist jetzt bei ListOfStrategies in der FabrikMethode. Ich müsste jetzt also am Anfang einmal eine Liste mit allen konkreten Strategien erzeugen. Bsp


private void InitStrategies()
{
    this.ListOfStrategies = new List<IStrategy>();
    this.ListOfStrategies.Add(new ConreteStrategy1());
    this.ListOfStrategies.Add(new ConreteStrategy2());
    //....
}

Dabei ist zu bedenken das in meinem Konreten Fall der Erschaffung neuer Konreter Strategien relativ oft passiert. Nun hab ich keine Lust jedesmal die Factory Methode anzufassen bzw. es ist sehr fehleranfällig.

Ich könnte jetzt Beispielsweise via Reflection alle Klassen suchen die das entsprechende Interface implementieren und dann die Liste damit füllen. Das halte ich jedoch für keine so gute Idee. Mir wäre lieber es gebe eine "saubere" architektonische Lösung für dieses Problem. Hat einer eine Idee bzw. geht das was ich vorhabe, quasi die FabrikMethode unberührt zu lassen, nicht generisch zu lösen.

Thema: Klasse bzw. Möglichkeit zum globalen Abfangen von exceptions?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Nun macht das aber auch nicht das was ich will. Weil wenn ich jetzt auch das...

Das ist nicht richtig, wenn du dich besser in die Materie eingearbeitet hättest dann hättest du dir das MethodExecutionArgs mal richtig angeschaut.

Dort gibt es eine Property FlowBehavior.


public override void OnException(MethodExecutionArgs eventArgs)
{
    Console.WriteLine(
            string.Format("=> Exception {1}.{2}{0}Message: {3}{0}StackTrace:{4}{0}", Environment.NewLine, eventArgs.Method.DeclaringType.Name, eventArgs.Method.Name, eventArgs.Exception.Message, eventArgs.Exception.StackTrace));
    eventArgs.FlowBehavior = FlowBehavior.Continue;
}

grüße freak

Thema: Switch-case-Anweisung mit Strings
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
wobei Contains() bei strings nicht funktioniert

Wieso sollte das nicht funktionieren? Es ist zwar wesentlich langsamer aber das hier müsste m.E. nach gehen.


string extensions = ".txt.png.jpg";
if(!extensions.Contains(fi.Extension.ToLower()))
{
    //das wäre dann das selbe wie dein Default im Switch
}

Thema: Switch-case-Anweisung mit Strings
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wenn du im default landest, wie ist denn dann der Wert von deiner var test?

Thema: 'Reflection'-Tool gesucht
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Auch ein guter Decompiler ist dotPeek.

Thema: VS: Shortcut zur Quellcodeausrichtung
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich habe mir auch C# Layout beim 1ten Start vom 2010VS ausgewählt und bei mir ist der Shorcut wie auch bei FZelle Ctrl+K Ctrl+D

Thema: VS2010-AddIn für (mehrere) aktiv markierte Files?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi Cchat,

für deine 1.Hürde kann ich dir folgendes Tutorial empfehlen. Adding a context-menu to the Solution Explorer

Dein zweites Problem das du dann via XDocument etwas ändern möchtest und den Confirm changes Dialog ausblenden willst. Das, denke ich, kannst du wenn überhaupt nur schaffen wenn es ein VS2010 Setting gibt mit dem man das ausschalten kann. Dann könntest du mit deinem PlugIn dieses Settings aktivieren/deaktivieren.

Thema: VS2010-AddIn für (mehrere) aktiv markierte Files?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Cchat,

erst einmal muss ich anmerken das dein Text ziemlich schlecht zu lesen ist. Desweiteren poste mal ein bisschen Code wie du dein "Addin" bereits integriert hast, und was genau du mit

Zitat
Folgendes, ich kann zwar AddIn für Solution, Projekte schreiben.

meinst. Auch verstehe ich nicht was du mit
Zitat
wie kann ich die Projekte bzw. Files auflisten?
meinst du damit innerhalb des Addins?
Zitat
Wenn ich ein Projekt-Datei extern ändern würde, dann verlangt VS2010 von mir, dass ich das Projekt "erneut Laden" muss, ich möchte dies automatisch gesehen, wie kann ich es tun?

Heißt du das willst in deinem Addin verhindern das VS diesen Dialog anzeigt wenn immer sich irgendeine SourceDatei außerhalb des VS ändert? Wenn ja dann ist das m.E. nach der falsche weg!

Vorsorglich mal ein Tutorial zum durcharbeite How To implement an VS Addin

Thema: Zur Laufzeit Controls aktualisieren ...
Am im Forum: GUI: Windows-Forms

Aber wenn er doch sein Update macht, dann sollte die Übersetzung doch durchgeführt worden sein. Hast du mal anschließend ein Invalidate() auf das Control ausgeführt? Dies sollte zwar nicht nötig sein, da das Control selber dafür zu sorgen hat, aber versuch es mal.

Thema: Zur Laufzeit Controls aktualisieren ...
Am im Forum: GUI: Windows-Forms

Hallo mrennen,

hast du den mal debugged und geschaut ob das Control überhaupt in der Iteration auftaucht? Ich tippe darauf das du es gar nicht durch läufst.

Thema: Startfenster wieder anzeigen
Am im Forum: GUI: Windows-Forms

Hi Thorus,

im übrigen wäre die Show Methode nicht das was du brauchst, vielmehr brauchst du die Form.Activate() Methode weil du ja deine Form nur wieder aktivieren willst, gezeigt wird sie ja bereits soweit ich das dem Text entnehmen kann.

Im übrigen ist das auch ein Fall für Kommunikation zwischen 2 Forms.

Thema: [erledigt] Compact Framework und Multithreading - volatile Keyword
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi inflames2k,

ich würde mal folgendes tun, da ich auch der Meinung bin dass das Flag von irgendeiner anderen Instanz zurück gesetzt wird. Mach mal das Flag privat und definiere dafür eine Property. Dann ersetze alle Zuweisungen und benutze die Property und dann debug mal. Eventuell findest du den "Fehler" dann leichter, weil du so leicht mit bekommen würdest was im Workflow nicht stimmt.

Grüße rollerfreak2

Thema: Bitmap to ByteArray was ist falsch?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi thefiloe,

schau mal hier Bitmap in byte array schreiben.

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Jo werde ich machen.

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Jo da hätte ich auch selber drauf kommen können :(
Im Falle das const wird durch static erstetzt ist es wie du bereits erwähnt hast. Dann wird nicht die Konstante auf den Stack gepackt, sondern man hat dann dort eine InlineFieldInstruction und mit dem ILReader kann man die auch bequem auslesen. Damit sollten dann alle Unklarheiten beseitigt sein :D

Danke für die Unterstützung!

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi dN!3L,

danke für die Erklärung. Ich hab jetzt auch mal die Variante mit der Statischen String Klasse probiert. Erstaunlicherweise wird die Konstante direkt in den IL "kompiliert" daher auch bei folgender Variante steht direkt "affe" als InlineString.


public static void Test3()
{
    Test1(Strings.Ident, false);
}

public static class Strings
{
   public const string Ident = "affe";
}

Grüße rollerfreak2!

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich hab jetzt mal nach einem ILReader gesucht und promt was gefunden. Read IL from MethodBase

Und siehe da ziemlich einfach und schon hat mal den string.


MethodInfo mainMethod = typeof(Program).GetMethod("Test2");
ILReader reader = new ILReader(mainMethod);
foreach (ILInstruction instruction in reader)
{
    if (instruction is InlineStringInstruction)
    {
        string param1 = ((InlineStringInstruction)instruction).String;
    }
}

und siehe da "affe" steh in param1. Ich denke mit dem ILReader ist es leichter als wenn man das selber macht.

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Quasi genau so :D

Es gibt zwar kleine Ausnahmen, da werden die Strings aus einer Statischen Klasse ermittelt, aber generell ist das so wie beschrieben. Ich hab jetzt mal folgendes gemacht.


public static void Test1(string ident, bool flag)
{
    //nothing here
}

public static void Test2()
{
    Test1("affe", false);
}

Dann hab ich mir die MethodInfo (Test2) geholt den IL ByteCode ausgelesen. Leider bin ich nicht so bewandert wie die Parameter bzw. die Instructions dort abgelegt werden. Im vorliegenden Fall ist folgender ByteCode da für die Test2 Methode.

Array  OpCode   OperandType
_________________________
0:0     nop         InlineNode
1:114  ldstr        InlineString
2:21
3:0
4:0
5:112
6:22    ldc.i4.0    InlineNode
7:40    call          InlineMethod
8:2
9:0
10:0
11:6
12:0    nop         InlineNode
13:42  ret           InlineNode

Wo genau bekomme ich jetzt dort mein "affe" her?

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi dN!3L,

sieht ziemlich kompliziert aus. :D
Habs jetzt auch mal mit der Reflector API geschafft alle callee's einer Methode zu finden. Morgen auf Arbeit probier ich die Extension Method noch mal aus.

Ein Problem hab ich jedoch noch. Und zwar ist die Methode die ich suche (alle Aufrufe davon) eine Methode eines Interfaces. Diese hat 2 Parameter. Der erste ist vom Type String und wird in den entsprechenden Assemblies immer mit Constanten übergeben.

Quasi so:


((IMyInterface)this).SpecificMethod("identifier", ....);
((IMyInterface)this).SpecificMethod("identifier1", ....);
...

Was ich jetzt noch wissen müsste ist bei dem Methoden-Call die Value's hinter dem ersten Parameter, diese stehen ja schon zur Compilezeit fest. Mit der Reflector API hab ich mich schon dusselig gesucht, aber nix gefunden wie ich daran komme.

Wie siehts mit reiner Reflection aus, gibt es da eine Möglichkeit daran zu kommen?

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi dN!3L,

ich wollt die Extension Method grad mal ausprobieren und hab jetzt folgende Exception bekommen.

Fehler
Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

Dazu zu sagen ist das die zu analysierende Assembly mehrere andere Referenziert die alle mit .NET 2.0 gebaut sind. Die Exception tritt genau hier auf.


yield return methodInfo.Module.ResolveMethod(BitConverter.ToInt32(ilBytes, position + 1));

Ich hab auch mal versucht vorher alle Abhängikeiten zu laden, daher alle Assemblies die die zu analysierende Assembly referenziert. Selber Fehler.
Dann bin ich auf Mixed mode assembly exception gestoßen. Hab dann einfach in die app.config den besagten eintrag gemacht. Nun kommt jedoch folgende Exception:
Fehler
A BadImageFormatException has been thrown while parsing the signature. This is likely due to lack of a generic context. Ensure genericTypeArguments and genericMethodArguments are provided and contain enough context.

Inner Exception:
Fehler
An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)"

Passieren tut es wieder bei der besagten stelle und zwar wenn er die Methode IDispose auflösen will. Dann hab ich mal versucht die Überladung mit den 3 Parametern von ResolveMethod zu nehmen dabei bekomme ich zwar keine Exception, aber es wird keine Reference gefunden, da sind aber zu 100% welche drin, mit dem Reflector auch schon verifiziert.

yield return methodInfo.Module.ResolveMethod(BitConverter.ToInt32(ilBytes, position + 1), methodInfo.DeclaringType.GetGenericArguments(), methodInfo.GetGenericArguments());

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi gfoidl,

das mache ich die ganze Zeit schon, leider ist das Teil obfuscated. Das macht die ganze Sache nahezu unmöglich.

Fehler
This item is obfuscated and can not be translated.

[Edit] Mit dem detPeek von JetBrains gehts, da sieht man bisschen mehr als im Reflector. Mal schauen ob ich damit was in Erfahrung bringen kann.

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi gfoidl,

bin jetzt mal soweit gekommen (mit der Reflector API) das ich alle benötigten Assemblies in den AssemblyManager geladen habe. Dann bin ich durch die besagte "externe" Assembly durch und habe mir die IMethodDeclaration gesucht die ich verfolgen will. Nun dachte ich bietet die API eine Möglichkeit alle Referenzen dieser Methode suchen zu lassen, aber ich finde leider nix. Quasi wie wenn man im Relfector auf Analyze Method klickt, und dann UsedBy. Das ist doch sicher als Funktionalität gekappselt. Jedoch finde ich auch keine Doku von der API sodass ich in der Luft hänge.

Klar ich könnte jetzt jede IInstruction jedes anderen Assembly durch fursten und schauen ob ich da einen Call finde, aber genau das müsste es ja schon so ählich geben in der API.

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hab ein kleines problem, und zwar komm ich nicht an die Reflector API dll ran. Ich hab mir auch mal das zu dem Link gehörende TestRun Projekt runter geladen, aber auch dort ist nur ne Reference drin, die dll an sich nicht. Auch hab ich versucht den Reflector.exe als Referenz (5.0.0.0) einzubinden, alledings gibt es dort das Interface IAssemblyLoader gar nicht. Auch die Klasse Application gibt es im Refelctor.exe nicht. Was mache ich falsch?

[EDIT] Man sollte vorher ab und zu mal die Readme lesen. Aus IAssemblyLoader ist IAssemblyManager geworden bzw. andersherum, und Application mur ApplicationManager heißen.

Thema: Alle Aufrufe einer Methode finden, Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo gfoidl,

perfekt ich denk damit bekomme ich es hin.