よく説明されていない同様の問題がたくさんあるようです。
環境:
勝利7
VS2012 プロ
Windows SDK 7.0
私たちの環境では、x86 と x64 の 2 つのコード ベースを生成します。この特定のプロジェクトでは、 を生成し*.XMlSerializers.dll
ます。Generate Serialization Assembliesのビルドでの設定は ですAuto
。
プロジェクトを x64 構成にコンパイルすると、SGEN エラー「アセンブリを正しくない形式でロードしようとしています... system.data.dll」が表示されます。詳細な調査により次の結果が得られたため、このエラーは完全に誤解を招く可能性があります。
procmon
fromを使用しsysinternals
て SGEN をトレースしました
- AnyCpuおよびx86 用にビルドすると、 procmonがトレースを表示します。使用中のsgenは
C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin
(32 ビット sngen.exe)からのものです。 - x64用にビルドする場合、トレースはなく、上記のエラーのみが表示されます
プロジェクト構成を設定してシリアライザーを作成し、x64 でアセンブリをコンパイルしました。次に、コマンドラインを試しました
- -で SGEN を使用して成功しました
C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\x64
(注意してください - これは 64 ビットの sgen.exe です)。 - x64 アセンブリでの 32 ビット SGEN の実行に失敗しました。
これらの結果から結論が導き出されます。VS2012 がGenerate Serialization AssembliesをONに設定してプロジェクトをコンパイルすると( autoは特殊なケースです)、sgen.exeを見つけようとします。ただし、プロジェクト構成が x64 プラットフォーム用にビルドするように設定されている場合、x64 用にビルドされた適切なsgen.exeが見つかりません。
質問: Visual Studio が適切な SGEN を見つけられるように設定できるmsbuild構成またはレジストリ設定、またはその他の設定はありますか?
回避策、つまりビルド後のイベントとそれをオフにすることについては知っていますが、これは重要ではありません。