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

Sourcecode Änderungen feststellen, ohne Kommentare zu berücksichtigen
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

Themenstarter:

Sourcecode Änderungen feststellen, ohne Kommentare zu berücksichtigen

beantworten | zitieren | melden

Hallo zusammen,

ich habe folgendes Problem. Ich möchte feststellen ob sich an einem File der sourcecode geändert hat, daher wenn sich kommentare oder xml dokumentation ändert, dann hat sich ja der Sourcecode nicht geändert, das heißt dies soll ignoriert werden.

Eventuell gibt es ein Tool/plugin/dll mit dem man Sourcecode in tokens zerlegen kann um dann die Tokens zu vergleichen. Händisch wollte ich da nicht ran, weil das doch ein wenig viel Aufwand ist alles selber zu parsen...
Again what learned...
private Nachricht | Beiträge des Benutzers
Equilibrium
myCSharp.de - Member



Dabei seit:
Beiträge: 190

hi

beantworten | zitieren | melden

redest du von einer art versionskontrollsystem? dann wäre SVN bzw. Git eine gute variante dafür, allerdings ist das ignorieren von xml müsste man händisch machen, wenn die dateien mit diff vergliechen werden im interaktiven Modus. Würd dir empfehlen mal bei Git ein bisschen zu probieren, vielleicht löst es ja bereits dein Problem :-)

GIT
Tortoise für Git (Kontextmenü hilfe statt konsolenkonfiguration)

Gruß
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

Themenstarter:

beantworten | zitieren | melden

Mit source Kontrolle hat das nix zu tun, daher die Files stehen bereits unter einem Source Kontroll System. Ich will lediglich heraus finden ob sich von einer Version zu einer anderen etwas am source Code geändert hat. Daher sind xml und Komentare etc. nicht zu beachten.
Again what learned...
private Nachricht | Beiträge des Benutzers
Equilibrium
myCSharp.de - Member



Dabei seit:
Beiträge: 190

hm

beantworten | zitieren | melden

hm ein nebeneffekt von VCS Systemen ist doch aber verschiedene Zweige mit einander vergleichen zu können, und dabei wird dir genau dies aufgelistet: geänderte Dateien samt zeile und inhalt?

Beispiel z.b in Git
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Equilibrium am .
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

Themenstarter:

beantworten | zitieren | melden

Aber dann muss ich wieder per Hand alle Differenzen auswerten, und schauen ob das auch "SourceCode" beteiligt ist. Das wird ziemlich schwierig, daher wenn zum Beispiel jemand nur einen Buchstaben in einer Xml doku zu ner Methode geändert hat, dann bekommt man nur die Differenz des einen Buchstabens und "mann" muss dann raus finden in welchem Kontext sich diese Änderung befindet.

Ich dachte eher an sowas wie den Code in eine Zwischensprache zu übersetzten, dies mit beiden Files machen, und wenn sich nix am SourceCode geändert hat, dann müssten auch die beiden Zwischensprachen "identisch" sein. Ich denke sowas muss es doch schon geben, schließlich macht der Compiler etwa das selbe beim Übersetzen, den Code in eine IL zu wandeln, oder z.b. CloneDetective beim detektieren der CodeClone.

Das Problem daran ist, das es nicht auf der .NET Ebene arbeiten darf, daher ich habe z.b. nur ein File, zum bauen jedoch braucht dieses File mehrere andere. Diese sind zur Ermittlung der Sourcecodeänderung aber nicht verfügbar. Es muss rein auf "tokens" basieren.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rollerfreak2 am .
Again what learned...
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

Hallo!

Wenn man z.B. lokale Tools für die Versionskontrolle installiert, sollten diese in der Regel bereits im Dateisystem anzeigen, ob sich was an einer Datei geändert hat (das funktioniert auch bei der Suche).
EDIT: Hab' gerade gemerkt, dass dies ja genau dein Einwand war.

Nur einzelne Bereiche anhand einer "Zwischensprache zu vergleichen", wird wohl kaum möglich sein (außer auf Assembly-Ebene).

Soll die Änderung den lokal oder zentral festgestellt werden?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von tom-essen am .
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers
m.knigge
myCSharp.de - Member

Avatar #avatar-3136.png


Dabei seit:
Beiträge: 178
Herkunft: Hannover

beantworten | zitieren | melden

Zitat von rollerfreak2
Das Problem daran ist, das es nicht auf der .NET Ebene arbeiten darf, daher ich habe z.b. nur ein File, zum bauen jedoch braucht dieses File mehrere andere.

Vielleicht hilft ja das hier:

http://www.codeproject.com/KB/cs/UncommCS.aspx
oder
http://www.fryan0911.com/2010/03/remove-comments-in-your-ccc-codes-using.html


bye,
Michael

P.S.: Mein Chef sagte vor einigen Jahren mal zu mir, ich solle nicht so viele Kommentare in den Source Code schreiben - Zitat: "Kommentare hindern den Lesefluss".... ;-)
Debuggers don't remove Bugs, they only show them in Slow-Motion.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo rollerfreak2,

eine Routine zu schreiben, die (XML-)Kommentare (und evtl. auch Leerzeilen/WhiteSpaces) aus einer Quellcode-Datei entfernt, sollte in wenigen Zeilen möglich sein. Im Grund muss man ja nur nach /* bzw. // (oder ///) suchen und dabei beachten, dass man Zeichen innerhalb von Strings ignoriert. Die Routine wendet man auf beide zu vergleichende Stände an und vergleicht das Ergebnis.

herbivore
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

Themenstarter:

beantworten | zitieren | melden

Ja das wäre eine Idee. Wenn man nun aber einen Variablenname Ändert hat sich am Sourcecode ja eigentlich auch nix geändert, zumindest am resultierenden Assembly. Deswegen suchte ich nach einer Art sourcecode Token Generator bei dem die Kommentare, Variablenname etc. egal sind. Aber soetwas scheint es nicht zu geben, oder ich habs nur noch nicht gefunden.

Die einfachere Variante mit den Kommentaren ist zwar leicht umsetztbar (Danke für den Lösungsvorschlag) aber leider nicht wirklich allgemein gültig für mein Problem. Hab wahrscheinlich vergessen zu erwähnen das dass resultierende Kompilat entscheidend ist.
Again what learned...
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo rollerfreak2,
Zitat
Aber soetwas scheint es nicht zu geben ...
das denke ich auch.
Zitat
Wenn man nun aber einen Variablenname Ändert hat sich am Sourcecode ja eigentlich auch nix geändert, zumindest am resultierenden Assembly.
Wenn du so anfängst, wirds echt haarig, denn es gibt ja massig Refactoring-Maßnahmen, die am Verhalten des Codes nichts ändern, eigentlich alle, denn das ja gerade die Definition von Refactoring. Im Grunde willst du wohl sowas wie semantische Gleichheit. Die wäre dann sogar noch gegeben, wenn jemand i = 2 * j; in i = j << 1; ändert. Wie weit willst du das treiben?

Im Grunde könntest und müsstest du das über UnitTests abfackeln, sofern diese eine 100%ige Abdeckung haben. Dann könnte man jede Codeänderung, die immer noch alle Tests erfolgreich absolviert, als semantisch gleich zu dem vorherigen Stand ansehen.

herbivore
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

Hallo

@herbivore:
Wobei bei einer Erweiterung des Codes um zusätzliche Funktionalitäten die bisherigen Tests weiterhin alle erfolgreich arbeiten. Die einzige Änderung dann ist, dass nicht mehr alles zu 100% abgedeckt ist, d.h. hier müsste eine weitere Prüfung erfolgen (100% Testabdeckung + Alle tests erfolgreich)
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat von rollerfreak2
Hab wahrscheinlich vergessen zu erwähnen das dass resultierende Kompilat entscheidend ist.
Gemeiner Workaround: Compilieren und diff über Binaries
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

Themenstarter:

beantworten | zitieren | melden

Danke für die vielen Hinweise, ich denke wie Herbivore bereits erwähnt hat führt das vom hundertsten ins tausendste. Ich schau mal wieweit das den Rahmen sprengt, aber das mit den Binaries vergleichen klingt auch interessant. Problem allerdings dabei ist das nicht jedes File einem Assembly zugeordnet ist.
Again what learned...
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

CodeCompare hat eine Option für "Ignore Comments". Allerdings hat das bei mir gerade nicht funktioniert...
Attachments
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

Wenn man Compare Content auf Symbol by Symbol stellt, funktioniert's.
Attachments
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

Themenstarter:

beantworten | zitieren | melden

Das sieht interessant aus. Hat das CodeCompare eine offene Schnittstelle? Daher kann ich das teil programmatisch nutzen, daher automatisieren. Ich glaub ich schau mir mal die Visual Studio Integration mit dem Relfector an, eventuell kann ich das dann irgendwie nutzen.
Again what learned...
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

beantworten | zitieren | melden

Es gibt eine tolle Seite mit .NET Reflector Addins auf Codeplex, da ist sogar noch Lutz Roeder mit dabei.
http://reflectoraddins.codeplex.com
Da gibts auch ein Diff Addin.
private Nachricht | Beiträge des Benutzers