2012-01-03 14 views
0

私の会社の私たちの中には、それについて主張している人がいます。ソースコードとコンパイラ(同じフラグ/スイッチでコンパイルされたコンパイラ)を指定すると、異なるOSで異なる動作をするバイナリをコンパイラが作成する可能性はありますか?同じコンパイラが異なるOSで異なる動作を作成する

具体的には、32ビットのWindows XPとWindows 7で実行するC#プロジェクトがあります。コンパイラはVS 2008です。ソフトウェアのビルドに使用するすべての必要なファイル、アセンブリ、プロジェクトなどを含むソリューションファイル(* .sln)があります。

同じソリューションファイルであるVS 2008でコード(同じソリューションファイル)をコンパイルすると、の動作の違いを持つバイナリが生成される可能性はありますかWindows 7でコンパイルされたバイナリよりも?与えられた状況で私が意味する行動の違いによって

... XPで期待どおりにXPのビルドが実行されます

  • 勝利7
  • ザ・で期待どおりに勝利7のビルドが実行されます
  • XPビルドでWindows 7でバグ(クラッシュや予期しない動作)が発生する可能性があります。

このプロジェクトは、あまりにも大きなテストプロジェクトを考え出すには大きすぎます。私は、上記が真実である場合にはどのようなケースがあるかを知りたい。

+3

「バグ」とは何ですか? –

+0

問題のバイナリをビルドします。バイナリ比較。異なっているものを見てください。私は彼らが同じになると思う。リリース版のみをビルドしてください。それ以外の場合は、マシン固有の情報がバイナリとpdbに追加されます。 – AMissico

+1

Windows 7にのみ存在するネイティブAPIメソッドを呼び出すことに気をつけます。 – sq33G

答えて

5

、答えはいいえ。

ただし、これはアプリケーションが実行するタスクがなく、異なるオペレーティングシステムで異なる動作をするわけではありません。

また、オペレーティングシステムのアプリケーション(ファイアウォール、DEP、UACなど)に対する応答が、別のオペレーティングシステム上に存在しないアプリケーションの欠陥を公開する可能性があることも考慮する必要があります。

さらに、別のトピックであるアンマネージドコードの問題があります。そして、私たちがそれをしている間、あなたのアプリからネイティブのOSコールが不安定になる可能性があります。

しかし、これは、オープニングセンテンスの制約が与えられたコンパイラによるものではありません。

2

かんたん回答:いいえ。

状況によってアプリケーションが失敗することがよくあります。たとえば、ライブラリ、ファイル、レジストリキーがありません。デバイスの取り外し。

うまくいけば、このような奇妙な何かをしていない、テストマシン上で、サービスパックを含むVS2008の同一のインストール、およびサービスパックを含む与えられた同じフレームワークを、与えられた)

if (DateTime.Now.Year != 2012) 
    throw new Exception(); 
+0

コンパイル時によってコードが異なる動作をするのはなぜですか? 'DateTime.Now'はコンパイル時にコードに埋め込まれた定数値ではなく、実行時に動的に読み込まれます。 –

+0

@コードグレー:言い換えれば、私が何を意味していたのか:) – Matthias

1

簡単な答えはノーです。マシンまたはオペレーティングシステムにかかわらず、コンパイラの性質は、同じコードに基づいて同じアセンブリを生成することです。

これが真実でない場合はどうなるでしょうか?さまざまなオペレーティングシステムとさまざまなサービスパックなどを使って、別々のビルドマシンを用意する必要があります。

関連する問題