[ASP.NET]Webサイトの発行で・・・

| コメント(2) | トラックバック(0)

wiz.code(本家サイト)の修正を行い、Web発行を行おうと思ったら・・・

"インデックスが配列の境界外です。"

と叱られ、発行できない (´・ω・`) ショボーン

ビルドは問題なく通るし、デバッグしてみてもエラーは発生しない。なのに、Webサイトの発行を行おうとすると上記エラーで先に進まず。。。出るのはエラーメッセージだけで、特定のソースに間違いがあるような指摘はない。「発行を開始して何らかの処理をしてエラー」ではなく、発行開始の(ほぼ)直後にエラーが出るので、非常にバグっぽい雰囲気が立ち込めている・・・。

wiz.codeでは、Webサイトとは別に処理用のプロジェクト(クラスライブラリ)をソリューションに加えているのだけど、どうもそれがあるとうまくいかず、しかも一度エラーが出ると二度とWeb発行ができないという・・・orz

ソリューションを1から作り直せば大丈夫で、上記のような別プロジェクトの参照を追加しても問題が起こらない場合もある。

ASP.NETでの開発では、ASPXのページから作成されたクラスが一時フォルダ内に作成される。そこに何らかの不都合があるのかと思い、これを消してみても結果は変わらず。自動保存されているソリューションなんかも消したって効果なし。

(´-`) ンー・・・原因はどこにあるのだろう・・・。正常に動くslnファイル(ソリューションファイル)と見比べてみても、おかしなところは見つからないし。

Microsoftのサイトで見つけたHotFixに同様の記事があり、Visual Studio 2005 SP 1 で 仮想パスを "/" にしていると発行時にエラーが・・・的なものがあった。。。のだけど、修正ファイルのインストーラが「バージョンが一致しない」とわがままを申し立てる始末。(うちのはVista用の修正パッチあててるからかな?)

 

これ以上は手におえないので、Windows 7 + Visual Studio 2005 の ASP.NET 開発で同じような症状や対処法をご存知の方、よろしければ情報ください。。。

 

さて、このままではサイト更新ができなくなってしまう。HotFixでVSの修正パッチが配布されている点を見ても、発行時のエラーがVisual Studioに起因するものである可能性は高い。それなら、VSを使わず直接Webサイトを発行してしまえばよいのだ~ヾ(*・ω・*)ノ

これぞ逆転の発想♪(いや、ちがうか・・・

 

Webサイトの発行の手続きを手繰っていくと最終的に「aspnet_compiler.exe」にたどり着く。これに直接コマンドラインで指示を出せばうまくいくのではあるまいか。

スタートメニュー
 すべてのプログラム
  Vistual Studio 2005
   Visual Studio Tools プログラム
    Visual Studio 2005 コマンド プロンプト

を起動して、次のようなコマンドを実行する。

aspnet_compiler -v "仮想パス" -p "ソース元" "出力先" -f

-vスイッチは仮想パスのことで、VSのプロパティウィンドウでの「仮想パス」に書かれたものを指定。通常、IISでは仮想ディレクトリを同じパスで構成し、Webアプリケーションを分離させる。仮想パスを使わない(Webサイトのルートに配置する)のであれば "/" とすればよい。

-pスイッチはソース元ディレクトリ指定。

出力先はスイッチなしで指定。

-fスイッチは出力先に既存のファイル群がある場合は削除する。

プリコンパイル後にサイトの更新を可能にするには -u スイッチを付け加えればOK。

 

この手動Web発行をエラーの出るソース(プログラム自体には問題なし)で試してみたところ、ちゃんと発行できました♪

別のプロジェクトをソリューションに加えている場合、ビルド順を考慮してコンパイルしてくれるかはわかりませんので、あらかじめビルドしておくことをおすすめ。

トラックバック(0)

トラックバックURL: /mt/mt-tb.cgi/32

コメント(2)

やっはりVisualstudio2005のバグと思う。以下の手順サイトの発行はできると思う。
1.vs2005起動、プロジェクト起動
2.webサイトのプロパティのところ仮想パスは適度に入力、例:/wwww
(何にも入力しない場合、プロジェクト再ロード場合バグが出で来ます。)
3.vs2005閉じる
4.vs2005起動、プロジェクト再起動
5.仮想パス/にする
6.webサイト発行

も一つ方法
vs2005閉じる時仮想パスは適度に入力例:/www
起動時仮想パス/変更

sunnyshen様
コメントありがとうございます。
VS2010に移行してからは、この手の問題は発生しなくなりました。私も2005のバグでほぼ確定と考えています。
追加調査はしていませんが、仮想パスを"/"にするのは問題が再発しそうで不安なので、今は必ず何らかの仮想パスを指定するようにしています。