Edited at

ASP.NET MVC デプロイ時の bundle 留意点

More than 1 year has passed since last update.

当然と言えば当然なのだが、ローカルのデバックビルドと, ローカルのリリースビルドと, デプロイ後ではバンドルの挙動にそれぞれ違いがあるわけで。

デプロイすると何か変なんだが、ということがあったのでメモ。


仮想パスと実在のパスを重複させてはいけない

つまるところ、こういうのはダメ。


BundleConfig.cs

bundles.Add(new ScriptBundle("~/Scripts/sample.js").Include(

"~/Scripts/sample.js"));

実在するパスと重複する仮想パスを与えると、ルーティングが競合して正常にバンドルされない。

デフォルトで入ってるのが"~/bundles/jquery"とかなのはそういうことなんですなぁ1


ディレクトリ構成は実在パスと揃えないと画像が読めない

直前と言ってることが違うやんけと思うかもしれないが、ディレクトリ構成を揃えろという話なので違ってないです。

CSSでの画像読み込み時、仮想パスが実際のディレクトリ構成に沿っていないと画像を読み込めない。

間違った例。


BundleConfig.cs

bundles.Add(new StyleBundle("~/bundles/Content/Css/Sample").Include(

"~/Content/Css/sample.css"));


sample.css

background-image: url("../Images/sample.jpg");


こうすると/bundles/Content/Css/Sampleから見ての../Images/sample.jpgを探しに行くので、結果/bundles/Content/Images/sample.jpgを見に行く。そんなものはない。

ディレクトリ構成を揃えれば参照できる。


BundleConfig.cs

bundles.Add(new StyleBundle("~/Content/Css/Sample").Include(

"~/Content/Css/sample.css"));

上記2つともローカル実行時にはいい感じに読み込んでくれていたのだが、デプロイしたらコケたのでアレ?となったという話でした。

そもそもデフォルトではデバッグ実行時のバンドルは無効になっているそうな1