2 台のマシン上の同じソース コードでは実行可能ファイルの動作が異なります。

StackOverflow https://stackoverflow.com/questions/86959

質問

シナリオは次のとおりです。

SVN に保存されている C# Windows アプリケーション プロジェクトは、実行可能ファイルの作成に使用されます。通常、ビルド サーバーはビルド プロセスを処理し、テストで使用されるビルドを定期的に作成します。この特定の例では、特定のビルドを変更して実行可能ファイルを作成するように求められました。

ビルド サーバーがプロジェクト ファイルを変更するかどうかは完全にはわかりませんが、実行可能ファイルのコンパイルに使用されたソース コードの SVN にタグが作成されることはわかっています。そのタグを使用して、2 番目のマシン (開発マシン) でコードをチェックアウトしました。次に、開発マシンでソースをコンパイルしました。

開発マシンでコンパイルされたアプリケーションは、実行すると、ビルド サーバーでコンパイルされたアプリケーションとまったく同じように機能しません。たとえば、テスト マシンでは、DateTime Parse 例外がアプリケーションによって検出されます。ただし、ビルド マシンの実行可能ファイルは例外をスローしません。開発マシンで実行可能ファイルを実行しても、例外はスローされません。

要約すると、両方のマシンは理論的には同じソース コードとプロジェクトを使用しています。
開発マシンの実行可能ファイルは開発マシンでのみ動作します。ビルド マシンの実行可能ファイルは、開発マシンを含むすべてのマシンで動作します。

マシンの地域設定またはタイムゾーンはコンパイルされた実行可能ファイルに保存されていますか?この動作の原因、または実行可能ファイルをチェックして考えられる違いを見つけて修正する方法について何か考えはありますか?

残念ながら、テスト マシンを持ち込んでデバッガを接続することはできません。できるだけ早くそうします。

役に立ちましたか?

解決

アプリは実行されているマシンの地域設定を使用していますが、それが問題のようです。System.Threading.Thread.CurrentThread.CurrentCulture と System.Threading.Thread.CurrentThread.CurrentUICulture を特定の値に設定することで、スレッドに特定のカルチャを強制的に使用させることができます。

他のヒント

2 台のマシンに、ビルド プロセスの一部ではない基礎となる DLL のバージョンが異なる可能性があります。社内サーバー ファーム全体にサービスを分散するときにこれが発生するのを見たことがあります。

デバッガを使用してビルド マシン上でプログラムを実行できますか?

その場合は、問題をデバッグします - 推測する必要はありません.

開発マシン上のデバッガに例外をキャッチさせ、ビルド マシン上の同じ場所にブレーク ポイントを設定します。2 つの違いを見てみましょう。

XP のさまざまな「地域と言語のオプション」がこの種の動作を引き起こすのを確認しました。これらは両方のマシンで一致しますか?開始|設定|コントロールパネル|地域と言語のオプション...

いくつか質問があります。両方のマシンの地域設定は同じですか? エラー ログはどこにありますか?例外が処理され、ディスクやイベント ログに書き込まれていることを願っています ;-)このような問題を解決するのに役立つもの。

解析されている日付はどこから来たのでしょうか?それがデータベースにある場合は、おそらく不良データもあります。

私もかつて同じような問題に遭遇しました (C++ を除く)。コンパイルされた実行可能ファイルのサイズを比較したところ、かなり離れていました。残念ながら、数日間検索した結果、私が見つけた最善の解決策は、VS05 をアンインストールして再インストールすることでした。

そもそも、C# コードにビルド サーバーを使用しているのはなぜですか?

C# を使用していたときのビルド時間は、ほとんど気にならなかった (2 秒未満)。アプリは本当にそんなに大きいですか?

おそらくビルド システムによってリリース バージョンが作成され、開発用 PC での手動ビルドによってデバッグ バージョンが作成されます。デバッグ バージョンには、より多くのエラー チェックが含まれています。リリース バージョンを手動でビルドできるかどうかを確認し、まだ違いがあるかどうかを確認してください。

全員が異なるコンピューター上で同じプログラムをビルドする場合、同じソース コードが使用されることはほとんどありません。プログラムは異なるものであると常に想定し、同じであるとは決して期待しないでください。優れたパッケージ マネージャーと定期的またはランダムな更新を備えた Linux のような環境では、同じソース コードが同じコンピューター上で同じプログラムをビルドすることを決して期待しないでください。言語が高度になるほど、状況は悪化します。デバッガー用のプログラムのビルドは、リリース用のビルドとは大きく異なります。デバッガー バージョンでは、デバッガーがなくても、リリース ビルドに移行するまで見つからないバグが隠されています。デバッガー環境に依存しすぎると、基本的にプログラムを 2 回デバッグすることになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top