XmlSerializerでFileNotFoundExceptionのエラーがでないようにするには?

解決


唯香  2010-09-06 22:18:49  No: 147153

sgen.exeの使い方について

アプリケーションの設定をXMLで読み込みや書き込みする際に
今までは問題なかったのですが急にエラーがでるようになりました。

エラーがでるのは以下のプログラムの2行目です
Using fs As New FileStream(XMLPath, FileMode.Open, FileAccess.Read)
    Dim xs As New XmlSerializer(GetType(《クラス名》))
    Dim obj As Object = xs.Deserialize(fs)
    Instance = CType(obj, cls112)
    fs.Close()
End Using

エラー内容は以下のエラーが2回でてTryCatchしてもExceptionに飛ばず例外を捕まえられません。
「System.IO.FileNotFoundException' の初回例外が mscorlib.dll で発生しました。」

調べてみると同じ現象の方がいらっしゃったので
(http://yk.tea-nifty.com/netdev/2009/03/xmlserializer-a.html)
sgen.exeを使ってみようと思ったのですがコマンドが分かりませんでした。

調べてみるとビルド時にコマンドからsgen.exeを実行させることができるようなので
(http://kah.s35.xrea.com/cs/cs_xml.htm)
こちらを参考にsgen.exeを探しコマンドを作成しリビルドをかけたところ
以下のような例外が発生しリビルドが失敗しました。
コマンド "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sgen.exe /force "《作成されたEXEのフルパス》" はコード 9009 で終了しました。

さらに調べてみるとOS(XP PRo)側が原因らしく
同じパソコンで1年ほど前に使用していたHDに入れ替えて
プログラムを実行させてみると確かにエラーはでませんでした。
(コマンドは同じエラーがでたのでXPのせいじゃないようです)

そもそもsgen.exeが何をしているか調べてみたのですが理解できず。。
http://msdn.microsoft.com/ja-jp/library/bk3w6240(VS.80).aspx

八方塞がりなりましたので投稿させていただきました。
エラーがでないようにするにはどうしたらいいでしょうか?

XP Pro / VB2008


YuO  2010-09-07 21:23:12  No: 147154

まず,例外自体はシステム内部の物なんですよね。
それであれば,性能等の問題がないなら気にしないのも一つの手です。

Sgen.exeは,XMLシリアル化の初回の速度を速くするための物です。
初回はアセンブリからXMLシリアル化のための情報を取得する必要があるため,遅くなります。
それを回避できます。
# その時間がいままでそれほど気になったことはないですが……。


唯香  2010-09-13 19:45:28  No: 147155

YuO様お返事ありがとうございます。
お返事が遅くなり申し訳ありませんでした。

> まず,例外自体はシステム内部の物なんですよね。
> それであれば,性能等の問題がないなら気にしないのも一つの手です。

私も別のHDではエラーがでないので無視していたのですが
debug.print派なのでちょっと耐え難くなってしまいました。

> Sgen.exeは,XMLシリアル化の初回の速度を速くするための物です。
> 初回はアセンブリからXMLシリアル化のための情報を取得する必要があるため,遅くなります。
> それを回避できます。
> # その時間がいままでそれほど気になったことはないですが……。

そのようですね。
使い方が分からないのですがコレで出なくなった方がいらっしゃるので
イミディエイトウィンドウが例外で埋まらず
XMLシリアル化が内部的に早くなるのであればと思ったのですが
どうしようもないようなので解決とさせていただきます。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加