2012-04-03 6 views
0

MVC 3 + Contrib Project PortableAreasを使用してWebを複数のプロジェクトに分割しました。 私はMVC 4に移動し、CSSとJSの新しい機能の縮小を使用したいと思います。MVC 4ポータブルエリアCSS/JS minification

しかし、私はやるとき:

<link href="@Url.Content("~/DSB/Styles/CSS")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Content("~/Scripts/common/js")" type="text/javascript"> 

の代わりに:

<link href="@Url.Content("~/DSB/Styles/Site.css")" rel="stylesheet" type="text/css" /> 
<link href="@Url.Content("~/Content/themes/smoothness/jquery-ui-1.8.12.custom.css")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Content("~/Scripts/common/jquery-1.4.4.min.js")" type="text/javascript" /> 
<script src="@Url.Content("~/Scripts/common/jquery-ui-1.8.11.custom.min.js")" type="text/javascript"></script> 

それは動作しません。 ポータブルエリアでのバンドル/ミニ化の使用方法ここ

おかげ

+0

サイドノート ) ' ので、あなたのコードでは、すべての'は必要ありません。 Url.Content'は生のURLを書きます –

+0

ありがとう、これは分かりませんでした。 – Luka

+0

これは古い質問ですが、実際の解決策を見つけましたか?個人的な意見の種類:ポータブルエリアのコンテンツは既に埋め込みリソースとしてDLLにプッシュされています。あなたはそれを任意の変更で再コンパイルする必要があります。なぜコンパイル前にJSとCSSを縮小しないのですか? chirpyを試してください:http://chirpy.codeplex.com/そして、すでに縮小されたJS + CSSをdllに追加してください。 –

答えて

1

問題がバンドルと縮小が実際のファイルよりも何か他のものを扱う予見していないということです。私はここで働く2つのソリューションを持っています。

ファイルを一時ファイルに展開する - アプリケーション内のフォルダに対する書き込み権限が必要です。 Hereはそれを処理するコードです。一時的なターゲットパスとして "Static"というディレクトリを使用します。あなたはこのようにそれを使用することができます:あなたは非ポータブルアプリでそれを使用するかのようにテンプレートでそれを使用して

bundles.Add(new Rebundler(assemblyWithPortableArea, "~/VirtualPathUsedForResource") 
       .Include("Fully.Qualified.Embeded.Resource.Name", "other...") 
       .Rebundle()); 

は、exaxctlyあるScripts.Render()または@のStyles.Render()@

ので、

もう1つの解決策は、埋め込まれたリソースを使用できるようにする一連のクラスを作成することです。 Hereは基本クラスで、scriptstyleバンドルがここにあります。ここでの使用です:

bundles.Add(new EmbededStyleBundle(assemblyWithPortableArea, "~/VirtualPathUsedForResource") 
       .Include("~/AreaName/Content/themes/custom/jquery-ui.css")); 

このアプローチでは、あなたはリソースをレンダリングするthisクラスを使用する必要があります。このコードははるかにクリーンからであることを

@Assets.RenderStyles("virtual path here") 
@Assets.RenderScripts("virtual path here") 

注:だからではなく、@のScripts.Renderを(使用する)またはStyles.Render @()テンプレートコードは次のようになります。ほとんどリバースエンジニアリングされており、いくつかのパスをスキップする可能性がありますが、これまでのところうまくいくようです。 `〜/コンテンツ/ site.css`のようなURLが` Url.Content(に自動的に変換されます「MVC 4」に

+0

これは、web.configのdebug = "false"またはBundleTable.EnableOptimizations = trueのときに機能します。日々のデバッグでは、スクリプトはレンダリングされません。おそらくfiles.Add(new FileInfo(resourceName));存在しません。私はRenderScriptsが見つからないファイルを削除すると思います - あなたはこれに対する修正がありますか?私はmvccontrib /AreaName/Scripts/file.js/AreaName/Styles/file.cssに定義されているルート経由で埋め込みリソースへのルートを使用しようとしました。/Content/Styles/file.css、/ Content/Scripts/fileという規則に従っています。アセンブリのjs - しかしそれはそれを修正しませんでした。 –