1

プロジェクトのMSBuildファイルで、xmlシリアル化中に使用されるクラスを含むアセンブリをsgenします。クラスはxsd.exeを介して生成されます。

次のSGenタスク構成を使用します。

<SGen ToolPath="$(SdkPath)" 
      ShouldGenerateSerializer="true" 
      UseProxyTypes="false" 
      BuildAssemblyName="AssemblyName.dll" 
      BuildAssemblyPath="Outputs" 
      ContinueOnError="false"  />

ビルドサーバーでmsbuildスクリプトを実行すると、断続的に次のエラーがスローされます。元々、このエラーは50(CI)ビルドごとに1回発生した可能性がありますが、最近は頻度が増加しており、現在は10ビルドごとに5〜6回発生する可能性があります。

Sgennedされているアセンブリのサイズは約410k(生成されたコードの約35,000行)であり、成功すると、シリアル化アセンブリのサイズは約1.7Mになります。

失敗した場合の出力は次のとおりです。

Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
E:\Path_ToBuild_Workspace\SolutionBuild.MSBuild(74,5): error MSB6006: "sgen.exe" exited with code -1073741819.

Hudsonを使用してビルドを管理しているため、msbuildプロセスとsgenプロセスはHudson.exeによって生成されます。

SGenからのこのタイプのエラーに関して、インターウェブにはあまりありません。確かに具体的なことは何もありません。

4

1 に答える 1

2

これは、32 ビット バージョンの Java ランタイム環境が sgen.exe のインスタンスを生成したことが原因のようです。ビルド サーバーは、Windows Server 2003 x64 でデュアル Opterons を実行しています。

JRE の 64 ビット バージョンに切り替えると、ランダムな AccessViolationExceptions の問題が修正されたようです。

于 2010-05-21T15:48:19.297 に答える