bei uns im Team führt das Thema der Koonstellationen
CLR Version / C# Compiler Version / .NET Framework Version / C# Version etwas zur Verwirrung und da ich hier gerne etwas mehr Klarheit schaffen würde bin ich auf der Suche nach einer einfachen Matrix, die das übersichtlich zeigt. Leider habe ich nichts adäquates gefunden.
Hat da ggf. jemand von euch einen Link zu einer geeigneten Matrix oder ähnlichem?
Hallo,
das mit dem Delegate.Target ist ein guter Wink, das hatte ich noch nicht probiert.
Zitat
[..] per Reflection auch von außerhalb der Klasse, ABER das ist in meinen Augen großer Mist.
Grundsätzlich ist das klar und ich habe auch nicht vor das im "normalen" Anwendungsfluss zu implementieren. Ich denke da vielmehr an einen Ansatz, der es mir ermöglicht mit deklarativen Elementen am Code der Anwendung Informationen zu loggen, der es erlaubt den Anwendungsfluss später automatisiert wieder auszuführen. Wichtig ist mir die in der Literatur oft als "Crosscuting concerns" von der eigentlichen Anwendungslogik zu trennen.
Um das zu erreichen bin ich auf der Suche nach geeigneten Werkzeugen
gibt es eine Möglichkeit zur Laufzeit z.B. mit Hilfe von Reflection die sender Instanz eines bestimmten Event Handlers herauszufinden?
Ich meine damit nicht während der Ausführung des Handlers, wo man ja ohnehin Zugriff hat.
Um die Handler Methode ggf. "künstlich" - also nicht durch den Event - auszuführen und dies entsprechend mit sinnvollen Parametern zu tun müsste ich zu diesem Zeitpunkt an der Stelle wo ich den Aufruf tätige über die entsprechende Information verfügen.
Also soetwas wie: Merke dir die Sender Instanz eines Events zum Zeitpunkt der Event Registrierung oder so..
Ich fürchte damit ist mir nicht geholfen - vielleicht habe ich mich auch nicht optimal ausgedrückt.
Was ich benötige ist eine Möglichkeit innerhalb der Instanz des Attributes eine Referenz auf das entsprechende Objekt oder MemberInfo Objekt zu ergattern.
Intention ist es innerhalb des Attributes mitzubekommen wenn die entsprechende Methode auf die as Attribut angewendet wird aufgerufen wird. So könnte ich deklatativ
1. ein Logging betreiben
2. Informationen auswerten, die den Aufruf der Methode betreffen.
Eine Alternative könnte sein, eine Art Listener an das entsprechende MethodInfo Objekt zu hängen, aber wie und ob das geht weiss ich nicht..
Wenn ich ein CustomAttrbute schreibe und dieses auf eine Klasse oder Methode anwende kann ich wunderbar per Reflection die MemberInfos auslesen, auf die das Attribut angewendet wurde.
Besteht auch die Möglichkeit vom Code des Attributes aus Zugriff auf das MemberInfo Objekt zu bekommen, auf das eine Instanz des Attributes angewendet wurde? Wenn ja wie stelle ich das an?
In einer Anwendung werden bei deren Ausführung Teile des GUI Status mit der Intention in ein XML Dokument persistiert, zu einem späteren auf die gleiche Weise bei gleichem Anwendungs Flow erneut ein XML Dokument zu erstellen.
Das Ziel ist es, auf diese Weise durch ein Diff der beiden XML Files festzustellen, ob sich zwischentzeitlich Fehler in der Anwendung eingeschlichen haben.
Ein einfaches Diff mit einem Tool wie Windiff zu erstellen ist nicht schwer. Spätestens wenn aber (gewollte) Änderungen an der Anwendung zu einer Differenz führen hat man mit diesem Vorgehen ein Problem.
XmlDiff beispielsweise ist in der Lage Teile wie Präfixe oder Namespaces vom Vergleich auszunehmen.
Mein Dilemma ist allerdings dass meine Anforderung darüber hinaus geht:
Ideal wäre es einzelne Elemente/Attribute vom Diff Process ein-/ausschliessen zu können.
Eine Möglichkeit:
Zuerst überprüfe ich auf string gleichheit. Wenn das Ergebnis true zurück gibt: Wunderbar.
Wenn nicht könnte ich gegen ein XSD Schema validieren welches ich speziell für diesen Zweck erstellen könnte.
Das Problem dieses Ansatzes: Bei Schema Validierung habe ich soweit ich weiss keine Möglichkeit herauszufinden in wieweit die Werte der Elemente/Attribute übereinstimmen.
Das wäre allerdings nötig nach der derfolgreichen xsd validierung um herauszufinden ob meine Heuristik True oder False zurückgibt.
Hat jemand von euch eine Idee, wie man diese Problematik sinnvoll angehen könnte? Wisst ihr ob hierzu vielleicht schon Tools7APIs für diese Aufgaben zur Verfügung stehen?
auf automatisierte Weise laden wir unter bestimmten Umständen Typen zur Laufzeit. Um an den Typen zu kommen greifen wir auf die Assembly, die u.a. auf folgende Weise im XML definiert ist:
Jetzt stellt sich mir die Frage, was ich tun kann um eine TypeLoadException zu verhindern wenn die entsprechende Assembly durch eine mit einer neueren Version ausgetauscht wurde.
Soweit ich weiss gibt es die Möglichkeit einen Abschnitt in der app.config - Elemente dependentAssembly - bindingRedirect - zu definieren der ein Mapping mit definiert.
Gibt es eine Möglichkeit, auf diese Konfiguration zu verzichten?
Sodass z.B.
"MyAssemblyName, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b12a5c561934e089"
geladen wird wenn
"MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b12a5c561934e089"
definiert ist, aber anstelle dieser erstere gefunden wird?
Ja, da habe ich auch gesehen, dass man die Voraussetzungen anscheinend mit dem SDK schafft.
das macht wohl u.a. die SDKVars.bat verfügbar welches wiederum auszuführen ist um die Visual Studio Tools ausführbar zu machen..
Ich hatte gehofft mit Hilfe eines primitiven xcopy C:\WINDOWS\assembly.....
oder ähnlichem mit sehr einfachen Mitteln um die Installation herumzukommen.
Kann zwar sein, dass das ziemlich ekelig aussieht, ich möchte momentan aber damit auch keine Bäume ausreißen oder irgendwelche Maßstäbe oder How Tos erstellen.
Funktionieren muss es..
Es handelt sich in meinem Szenario nicht für eine in breitem Umfang anzuwendende Installationsroutine.
Ich habe die Notwendigkeit möglichst einfach eine Installationsroutine oder ein Script für die Installation unserer Anwendung - im Development Prozess - zu erstellen, sodass die Anwendung ohne größeren Aufwand bei unseren Testern auf deren Maschinen installiert werden kann. Deshalb möchte ich mir aus pragmatischen Gründen ein tieferes Eintauchen in diese Prozesse - z.B. windows installer - wenn irgendwie möglich sparen. Ich denke, es wäre mit Kanonen auf Spatzen geschossen.
für ein Installationsskript benötige ich einige .dlls im GAC registriert.
Normalerweise mache ich das mit dem gacutil.exe tool, dass mit der Visual Studio installation mitgeliefert wird.
Leider ist die Wahrscheinlichkeit, dass auf der entsprechenden Maschine Visual Studio installiert ist recht gering.
Eine Framework 3.0 Version ist allerdings vorhanden.
Wie bekomme ich eurer Meinung nach unter diesen Umständen am einfachsten und schnellsten meine .dlls in den Global Assembly Cache installiert, ohne unnötigen Aufwand betreiben zu müssen?
genau der parallele Zugriff sollte das Problem sein..
Sicher. Die Lösung die ihr aufzeigt liegt mir jetzt auf der Hand. Manchmal sieht man den Wald vor lauter Bäumen nicht ;-)
folgendes Szenario:
In einer Consolen Anwendung die durch einen Scheduled Task getriggert wird,
schreibe ich in regelmässigen Abständen ein XML file auf Platte.
Parallel dazu greift eine ASP.NET Anwendung gelegentlich auf dieses File zu.
Das Problem ist nun - scheint mir auch irgendwo plausibel - dass durch den Lesezugriff der ASP.NET Anwendung das File wohl blockiert ist; d.h. ich kann im nächsten Zyklus des Scheduled Task das File nicht überschreiben.
Welche Möglichkeiten seht ihr hier, dieses Problem zu umschiffen?
Gibt es eine sinnvolle Möglichkeit das File explizit freizugeben? Die Zugriffe sind alle unter Verwendung eines using(...) gewrappt.
Vor folgendem Problem stehe ich:
Auf einem Rechner habe ich einen IIS installiert, unter c:\inettpub\wwwroot eine asp.net Anwendung (MyApp) mit einer default.aspx angelegt und das Verzeichnis MyApp mit einer Webfreigabe versehen.
ich hatte mich - bisher erfolglos - auf die Suche nach einer Möglichkeit gemacht in VS2008 Professional entwickelten Code auf Code Coverage im Hinblick auf usere Unit Tests zu untersuchen.
Soweit ich weiss ist dies von Seiten Microsoft nur im Feature Umfang des Team System enthalten.
Meine Frage nun: Kennt jemand von euch einen Weg das - von mir aus auch auf rudimentäre Weise ohne schön aufbereitetes GUI - ohne die Team Suite hinzubekommen? Gibt es da evtl. Commandline tools o.ä. dafür?
hmm, da wir leider aus Firmenpolicy Gründen keinen Team Foundation nutzen dürfen, scheint TeamCity damit in ein K.O. reinzulaufen fürchte ich.
Hat jemand Erfahrung mit CCNet und TeamCity? Vor- und Nachteile?
Wie (zeit-)aufwändig ist soetwas unter genannten Anforderungen für einen "Anfänger" aufzusetzen?
für unser Entwickler Team planen wir eine gemeinsame Infrastruktur, in die wir unsere schon in Betrieb befindliche Source Kontrolle (Perforce) und unsere MsTest Unit Tests einbinden und überwachen können. Continous Integration wäre nicht verkehrt denke ich.
Mehr oder weniger zwangsläufig stößt man in diesem Zusammenhang auf
CruiseControl.NET. Bisher habe ich keinerlei Erfahrungen, wie man ein solches System aufsetzt. Was schätzt ihr, wie lange soetwas ca. dauert, bis man das soweit hat, dass zumindest das Perforce und der Continous Build dort eingeklinkt ist?
Kennt jemand von euch "bessere" bzw, weniger aufwändige alternativen?
änlich versuche ich es gemeinhin auch zu machen - dass ich die Klassen/Objekte von denen mein System Under Test abhängig ist, durch Test Doubles ersetze. Damit vermeidet man eben die Problematik, dass Gedeih und Verderb des Tests von Pdoduktivkomponenten abhängig ist, die ihrerseits mit ihrem Verhalten Einfluss auf den Test haben.
vor einiger Zeit meine ich irgendwo die Möglichkeit gefunden zu haben das Template, genauer gesagt die eingebrachten using Direktiven am Kopf einer .cs Datei einstellen/konfigurieren zu können.
Weiss jemand von euch, wo ich diese Möglichkeit im Visual Studio 2008 bzw in dessen File System findet?
kurzer Nachtrag:
Vielleicht denke ich auch einfach zu kompliziert und es reicht zum automatisierten Testen, wenn ich auf den CurrentThread einfach eine entsprechend neue CultureInfo Instanz setze. Das sollte ja auf die App die gleiche Wirkung haben, wie wenn ich Windows global die regional settings ändere.
Den zweiten Teil kann ich beantworten: String.Format arbeitet standardmäßig mit den Einstellungen in "Regional and Language Options".
dachte ich auch, macht ja auch Sinn. Die Bestätigung dass das so ist hilft mir aber. Danke dir.
Zitat
ist dein Problem, Excel dazu zu bekommen, die Werte richtig zu formatieren oder willst du die Werte in C# richtig formatieren (damit Excel sie versteht)?
Eine Kombination aus beidem ist wichtig um zu gewährleisten, dass das Resultat passt. Dem User ist natürlich wichtig, dass die Formatierungen im Frontend (Excel) stimmen. Was hinter den Kulissen geschieht ist für ihn nebensächlich
Die Sache ist soweit implementiert, dass das Formatieren passen müsste. Um es zu testen werde ich auf meiner Maschine mal sämtliche Ländereinstellungen durchprobieren und die Soll Formatierungen mit den Inst Formatierungen vergleichen. Um das ganze dann automatisiert - regressiontest fähig - zu machen, werde ich mal sehen ob ich in meinem Unit Test die regional settings mit Hilfe von .NET ändern kann. So kann ich dann nach jedem Ändern den format string meiner Funktion abfragen und mit dem Soll wert vergleichen.
Was ich noch herausfinden muss ist, wie man die Regional Settings mit C# ändert. Spontan dachte ich da an System.Environment, das scheint aber so nicht zu gehen.
unsere Applikation liest Datums- und Dezimalwerte aus dem Backend aus und stellt sie in einem Excel sheet dar.
Jetzt stehe ich vor der Frage wie ich am Besten sicherstelle, dass die Darstellung der Werte im Excel Sheet in Bezug auf die im Windows XP/Vista unter „Regional and Language Options“ eingestellten Locales – Dezimalseparatoren, Tausender Trennzeichen, Stunden: Minuten:Sekunden –dargestellt werden.
Leider benimmt sich Excel da manchmal etwas eigensinnig.
Kennt ihr eine Möglichkeit in .NET den Formatierungsstring abhängig von den eingestellten Region Settings auszulesen und sinnvoll für das Formatieren der in Excel anzuzeigenden Werte zu nutzen?
Würdet ihr anders vorgehen?
Entscheidend ist, dass die Formatierung der Werte in Excel identisch mit den unter Regional Settings als Beispiel angezeigten Werten ist.
Ah verstehe. Mit Rhino Mocks habe ich mich ansatzweise mal auseinandergesetzt. Ich selber bin aber zu dem Entschluss gekommen, Mocking nur dann einzusetzen wenn es nicht anders geht. Das Ganze wird dann immer recht schnell komplex und vor allem macht man implizit Annahmen über das Verahlten des Codes, nicht nur über dessen Resultate. (Behavior verification).
Viele Grüße, ltrader
P.S: Mal sehen ob ich doch etwas mehr noch über den Host Adapter finden kann.