XML シリアライザ ジェネレータ ツール (Sgen.exe)

XMLシリアル化アセンブリを事前に作成することで、アプリケーションの起動ごとにXmlSerializerがそれを作成する処理を省略できます。ただしそのアセンブリがXMLシリアル化の対象でなければ、この処理自体が不要です。

プロジェクトのプロパティから設定する方法

プロジェクトのプロパティで[シリアル化アセンブリの生成]を[オン]と指定することで、XmlSerializerのアセンブリを作成できます。


【プロパティ → ビルド】

この方法では、次のようにオプションが指定されてsgenが実行されます。

sgen.exe /assembly /proxytypes /reference

ビルド時に「error MSB6006: "sgen.exe" はコード 1 を伴って終了しました。」としてアセンブリの作成に失敗する場合には、このsgenを直接呼び出してエラー内容を確認します。

ビルドイベントから設定する方法

ビルドイベントに設定することで、アセンブリの作成を自動化できます。プロジェクトのプロパティの[ビルド後に実行するコマンドライン]に、

sgen.exe /f "$TargetPath"

のように記述します。オプションの「/f」は、すでにファイルが存在する場合には上書きすることを指定します。これは「/force」でも同様です。その他のオプションについては、XMLシリアライザ ジェネレータ ツールに一覧があります。

なお作成されるファイル名は、[ assemblyName.XmlSerializers.dll ]の形式になります。

トラブル対処法

sgen.exeが認識されない

'sgen.exe' is not recognized as an internal or external command」としてsgen.exeが有効なコマンドと認識されない場合には、このコマンドへのパスを設定するかフルパスで指定します。

sgen.exeのインストール フォルダ
バージョン フォルダ パス
Visual Studio 2005 %ProgramFiles%\Microsoft Visual Studio 8\SDK\v2.0\Bin
Visual Studio 2008 %ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin
Visual Studio 2015 %ProgramFiles(X86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.x Tools\

64ビット環境でエラーとなる

エラー: 正しくない形式: *** のアセンブリを読み込みしようとしました。」として失敗するときには、64bit版のsgen.exeを使用します。visual studio - sgen.exe x64 .net c# fails with "assembly with an incorrect format" - Stack Overflow

Microsoft Learnから検索