例えば以下のような構成の場合。
`Content
|
| [jquery](http://d.hatena.ne.jp/keyword/jquery).mobile-1.1.1.[css](http://d.hatena.ne.jp/keyword/css)
|
+---images
| [ajax](http://d.hatena.ne.jp/keyword/ajax)-loader.gif `
BundleMobileConfigに以下のように定義されています。
` bundles.Add(new StyleBundle("~/Content/jquerymobile/[css](http://d.hatena.ne.jp/keyword/css)").Include("~/Content/[jquery](http://d.hatena.ne.jp/keyword/jquery).mobile-{version}.[css](http://d.hatena.ne.jp/keyword/css)")) `
上記 css には以下のように定義されている。
`url(images/[ajax](http://d.hatena.ne.jp/keyword/ajax)-loader.gif) `
するとデバッグ時は良いがBundleTable.EnableOptimizations = trueを指定して縮小させると画像のURLが以下のようになり読み込めないとエラーになる。
`[http://localhost:1509/Content/jquerymobile/images/ajax-loader.gif](http://localhost:1509/Content/jquerymobile/images/ajax-loader.gif) `
理由はBundleの定義でjquerymobileをフォルダのように記載してしまっているため、cssのURLが以下のようになるから。
`[http://localhost:1509/Content/jquerymobile/css?v=pFGS97cnbEIzXqbDbNmSv2vLBmv9zHVSGkyxN7zB0Qc1](http://localhost:1509/Content/jquerymobile/css?v=pFGS97cnbEIzXqbDbNmSv2vLBmv9zHVSGkyxN7zB0Qc1) `
解決策は / ではなく . にすればよい。
` bundles.Add(new StyleBundle("~/Content/jquerymobile.[css](http://d.hatena.ne.jp/keyword/css)").Include("~/Content/[jquery](http://d.hatena.ne.jp/keyword/jquery).mobile-{version}.[css](http://d.hatena.ne.jp/keyword/css)")) `
このように BundleCollection に css を加えるときは勝手にフォルダを追加しないようにすること ちなみに自動縮小っていうのは、ASP.NET MVC4 の新機能で javascript と css の改行コードを削って容量を小さくしてくれる機能です。普段のデバッグ時は無効になっていて、有効になる条件は2つ
- Web.config の compilation 要素が false の場合
- Global.asax の Application_Start() で BundleTable.EnableOptimizations = true と設定した時
デバッグ時に無効になっているので、IIS にいざデプロイした時に「あれ画像が表示されねー」って悩むかもしれません。 上記の例で上げたのは jQuery.Mobile.MVC という割とメジャーな NuGet パッケージを使用すると発生する問題なので修正したいんですが、CodePlex や github 見てもプロジェクトが見つからないのでメモ書きするぐらいしか無いという状況。