十分に検証していないので、自分の中ではオカルトな感じではありますが・・。
FTPサーバからファイルをダウンロードする機能を実装し、動作確認をしていた時のことです。
Visual StudioのReleaseモードでビルドし、問題なく動作していることを確認してデプロイ。
んで、デプロイした先で実行しようとした所。
WebClient要求で例外が発生しました。
という例外が。
あれー? と思い、Visual Studioでトレースしようとしたのですが、こちらでは問題ない様子。
デプロイ先も、開発機と同じPC。
FTPサーバもログインアカウントも同じ。
よくわからないけど、これじゃダメなのかーと思ってSystem.Net.WebClientを使っている部分をコメントアウトしてFtpWebRequest + FtpWebResponseを使う方法に切り替えてみました。
結果は、エラーメッセージこそ違うものの、
でした。
こうなったら全部調べるかーと思い、あちこちにトレースするメソッドを入れた(といってもMessageBox.Showしただけ)結果、単にダウンロード先のローカルパスが不正だったという粗末なオチでした。
OK→C:\work\test.dat
NG→C:work\test.dat ※ドライブレター直後のパス区切り文字がない
どうやらこれ、System.Net.WebClientとかFtpWebResponse周辺のメソッドではエラーになるんですね。
というか、逆にSystem.IoとかMy.Computer.FileSystemあたりではエラーにならないんですね。
いずれにせよ今後似たような例外が出たらパスまわりを注意せよ、ということですね。
余談ですが、なんでReleaseフォルダ上で動作させても正常終了したのか、ちょっと謎です。
デプロイ先との違いはvshost.exeとか.pdbファイルとかの有無ですが、それが何か補正かけてるんでしょうか・・・。
FTPサーバからファイルをダウンロードする機能を実装し、動作確認をしていた時のことです。
Visual StudioのReleaseモードでビルドし、問題なく動作していることを確認してデプロイ。
んで、デプロイした先で実行しようとした所。
WebClient要求で例外が発生しました。
という例外が。
あれー? と思い、Visual Studioでトレースしようとしたのですが、こちらでは問題ない様子。
デプロイ先も、開発機と同じPC。
FTPサーバもログインアカウントも同じ。
よくわからないけど、これじゃダメなのかーと思ってSystem.Net.WebClientを使っている部分をコメントアウトしてFtpWebRequest + FtpWebResponseを使う方法に切り替えてみました。
結果は、エラーメッセージこそ違うものの、
- Visual Studioから実行した場合は正常終了
- Visual StudioのReleaseフォルダから実行した場合も正常終了
- それ以外の場所(デスクトップでも
フォルダ内でも)NG
でした。
こうなったら全部調べるかーと思い、あちこちにトレースするメソッドを入れた(といってもMessageBox.Showしただけ)結果、単にダウンロード先のローカルパスが不正だったという粗末なオチでした。
OK→C:\work\test.dat
NG→C:work\test.dat ※ドライブレター直後のパス区切り文字がない
どうやらこれ、System.Net.WebClientとかFtpWebResponse周辺のメソッドではエラーになるんですね。
というか、逆にSystem.IoとかMy.Computer.FileSystemあたりではエラーにならないんですね。
いずれにせよ今後似たような例外が出たらパスまわりを注意せよ、ということですね。
余談ですが、なんでReleaseフォルダ上で動作させても正常終了したのか、ちょっと謎です。
デプロイ先との違いはvshost.exeとか.pdbファイルとかの有無ですが、それが何か補正かけてるんでしょうか・・・。
コメント