Frage

Hier ist das Szenario:

A C # Windows-Anwendungsprojekt in SVN gespeichert wird verwendet, um eine ausführbare Datei zu erstellen. Normalerweise verarbeitet ein Build-Server den Bauprozess und erstellt in regelmäßigen Abständen bildet, die durch Testen verwendet werden. In diesem speziellen Fall wurde ich gebeten, einen bestimmten Build zu ändern und die ausführbare Datei erstellen.

Ich bin nicht ganz sicher, ob der Build-Server der Projektdateien modifiziert, aber ich weiß, es ist einen Tag im SVN erzeugt den Quellcodes es verwendet, um die ausführbaren Dateien zu kompilieren. Mit Hilfe dieser Tag habe ich auf einer zweiten Maschine den Code ausgecheckt, die eine Entwicklungsmaschine ist. Ich habe dann die Quelle auf dem Entwicklungsrechner zusammengestellt.

Wenn er ausgeführt wird, die Anwendung, die auf der Entwicklung Maschine funktioniert nicht genau wie die vom Build-Server erstellt eine kompiliert wurde. Beispielsweise auf den Prüfmaschinen wird ein Parse execption Datumzeit durch die Anwendung festgestellt. Allerdings ist der Build-Rechner ausführbare keine exeptions werfen. Wenn ich die ausführbare Datei auf dem Entwicklungsrechner laufen keine Ausnahmen geworfen werden.

So Zusammengefasst sind beide Maschinen theoretisch den gleichen Quellcode und Projekte mit.
Die ausführbare Entwicklung Maschine funktioniert nur auf der Dev-Maschine. Die ausführbare Datei Build-Maschine auf jeder Maschine arbeitet, einschließlich der Dev-Maschine.

Sind die Ländereinstellungen oder Zeitzone der Maschine in der kompilierten ausführbaren gespeichert? Jede Idee, was dieses Verhalten verursachen könnte oder wie die ausführbaren Dateien zu überprüfen, die möglichen Unterschiede zu finden und zu korrigieren?

Leider kann ich nicht eine Testmaschine nehmen und einen Debugger an sie anhängen. Sobald ich kann, werde ich.

War es hilfreich?

Lösung

Die App nutzt die Ländereinstellungen der Maschine auf es läuft, und es sieht aus wie es ist Ihr Problem. Sie können einen Thread zwingen, eine bestimmte Kultur zu verwenden, indem System.Threading.Thread.CurrentThread.CurrentCulture und System.Threading.Thread.CurrentThread.CurrentUICulture auf einen bestimmten Wert zu setzen.

Andere Tipps

Es ist möglich, dass die beiden Maschinen verschiedene Versionen eines zugrunde liegenden dll, die nicht Teil des Build-Prozesses ist. Ich habe gesehen, dies geschieht, wenn Dienste über unsere interne Server-Farm verteilt werden.

Können Sie das Programm auf dem Build-Rechner unter einem Debugger laufen?

Wenn ja, dann das Problem debuggen - gibt es keine Notwendigkeit zu erraten,

.

Haben Sie den Debugger auf der Dev-Maschine die Ausnahme abfangen, einen Haltepunkt an der gleichen Stelle auf der Build-Maschine gesetzt. Sehen Sie, was zwischen den beiden unterscheidet.

Ich habe verschiedene gesehen „Regions- und Sprachoptionen“ auf XP verursachen diese Art von Verhalten. Habe dieses Spiel auf beiden Maschinen? Start | Einstellungen | Systemsteuerung | Regions- und Sprachoptionen ...

Ich habe ein paar Fragen - haben beide Maschinen haben identische regionalen Einstellungen und wo sind Ihre Fehlerprotokolle? Ich hoffe ;-) Sie werden Ausnahmen behandelt und auf die Platte geschrieben, Ereignisprotokolle .. etwas mit Problemen wie diesen zu helfen.

Woher kommt der Zeitpunkt kommen, dass analysiert wird? Wenn es in Ihrem db ist vielleicht haben Sie auch schlechte Daten.

Ich hatte ein ähnliches Problem einmal (außer in C ++) Wenn ich die Größe der kompilierten ausführbaren Dateien verglichen, waren sie weg. Leider ist nach Tagen des Suchens, die beste Lösung, die ich war gefunden VS05 zu deinstallieren und neu zu installieren.

Warum verwenden Sie einen Build-Server sowieso, für C # -Code, wenn ich fragen darf?

Die Bauzeiten für C #, wenn ich benutze es kaum wahrnehmbar ist (<2s). Ist die App wirklich so groß?

Das Build-System macht wahrscheinlich eine Release-Version, während die manuelle Build auf dem Entwickler-PC eine Debug-Version macht. Die Debug-Version hat mehr Fehler darin zu überprüfen. Sehen Sie, wenn Sie manuell eine Release-Version aufbauen können und sehen, ob es noch Unterschiede.

Die gleichen Quellcode selten, wenn jeder baut das gleiche Programm auf verschiedenen Computern. Sie sollten immer davon ausgehen, die Programme unterschiedlich sind, nie erwarten, dass sie das gleiche sein. In einer Umgebung wie Linux mit einem guten Paket-Manager und periodischem und zufälligen oder Updates, nie erwarten, dass die gleichen Quellcode entweder das gleiche Programm auf demselben Computer zu bauen. Je höher die Sprache desto schlimmer wird es. ein Programm für den Debugger zu bauen ist drastisch anders als für die Freigabe zu bauen. Die Debugger-Version auch ohne den Debugger verbirgt Fehler, die Sie nicht finden, bis Sie zum Release-Build gehen. Sie erhalten im Grunde zweimal das Programm debuggen, wenn Sie auf einer Debugger-Umgebung zu viel verlassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top