「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
コチラの内容をまとめた。
コチラを参照。
基本的な事項は、コチラを参照。
初期設定 †
Optimization.WebForms?をインストールする。 †
ASP.NET Web Formsでは、追加で以下のインストールが必要になる。
Install-Package Microsoft.AspNet.Web.Optimization.WebForms
また、インストール後に以下の定義をWeb.configに追加する必要がある。
<pages>
<namespaces>
<add namespace="System.Web.Optimization" />
</namespaces>
<controls>
<add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
</controls>
</pages>
</system.web>
Bundle & Minification †
以下のように、ASP.NET Web Forms用の追加のBundleConfigを行う。
インストール †
共通項でインストールしたパッケージに加え以下をインストールする。
Install-Package Microsoft.AspNet.ScriptManager.MSAjax
Install-Package Microsoft.AspNet.ScriptManager.WebForms
定義方法 †
- WebFormsJs?
詳細は不明。情報が殆ど無い。
- WebForms?.js
- WebUIValidation.js
- MenuStandards?.js
- Focus.js
- GridView?.js
- DetailsView?.js
- TreeView?.js
- WebParts?.js
- MsAjaxJs?
JS file related to ASP.NET Ajax
- MicrosoftAjax?.js
- MicrosoftAjaxApplicationServices?.js
- MicrosoftAjaxTimer?.js
- MicrosoftAjaxWebForms?.js
- 設定
- BundleConfig?を追加する。
(最新のASP.NET Web Formsプロジェクト・テンプレートからBundleConfig?を自動生成して入手)。
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
BundleTable.EnableOptimizations = true;
BundleTable.Bundles.UseCdn = true; // same as: bundles.UseCdn = true;
// ( new ScriptBundle("~/XXXX") のパスは実在するpathと被るとRender時にバグる。
// なので、bundlesと実在しないpathを指定している(CSSも同じbundlesを使用する)。
bundles.Add(new ScriptBundle("~/bundles/app").Include(
"~/Scripts/app/Site.js"));
bundles.Add(new ScriptBundle("~/bundles/otr").Include(
"~/Scripts/otr/common.js",
"~/Scripts/otr/ie_key_event.js",
"~/Scripts/otr/else.js"));
// こちらのCDNフォールバック設定はScriptManager内で行われているため不要
bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include(
"~/Scripts/WebForms/WebForms.js",
"~/Scripts/WebForms/WebUIValidation.js",
"~/Scripts/WebForms/MenuStandards.js",
"~/Scripts/WebForms/Focus.js",
"~/Scripts/WebForms/GridView.js",
"~/Scripts/WebForms/DetailsView.js",
"~/Scripts/WebForms/TreeView.js",
"~/Scripts/WebForms/WebParts.js"));
// こちらのCDNフォールバック設定はScriptManager内で行われているため不要
// これらのファイルには明示的な依存関係があり、ファイルが動作するためには順序が重要です
bundles.Add(new ScriptBundle("~/bundles/MsAjaxJs").Include(
"~/Scripts/WebForms/MsAjax/MicrosoftAjax.js",
"~/Scripts/WebForms/MsAjax/MicrosoftAjaxApplicationServices.js",
"~/Scripts/WebForms/MsAjax/MicrosoftAjaxTimer.js",
"~/Scripts/WebForms/MsAjax/MicrosoftAjaxWebForms.js"));
// 開発と学習には、Modernizr の開発バージョンを使用します。次に、実稼働の準備ができたら、
// http://modernizr.com にあるビルド ツールを使用して、必要なテストのみを選択します。
bundles.Add(new ScriptBundle(
"~/bundles/modernizr",
"//ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.8.3.js") // min 無し
{
CdnFallbackExpression = "window.Modernizr"
}.Include("~/Scripts/modernizr-*"));
ScriptManager.ScriptResourceMapping.AddDefinition(
"respond",
new ScriptResourceDefinition
{
Path = "~/Scripts/respond.min.js",
DebugPath = "~/Scripts/respond.js",
CdnPath = "//ajax.aspnetcdn.com/ajax/respond/1.4.2/respond.min.js",
CdnDebugPath = "//ajax.aspnetcdn.com/ajax/respond/1.4.2/respond.js",
CdnSupportsSecureConnection = false,
LoadSuccessExpression = "window.respond"
});
}
}
ScriptManager? †
ASP.NET Web FormsではScriptManager?にCDNフォールバック機能が実装されている。
- アセンブリから取得する場合はCDNフォールバックの定義は不要。
- 以下の場合は、CDNフォールバックの定義が必要になる。
- 自前のScriptManager?定義を使用する場合
- CDNフォールバック動作をカスタマイズする場合
ScriptBundle? †
その他、ASP.NET MVCと同様に、ScriptBundle?クラスで、
個別にCDNフォールバックの定義を行なうこともできる。
定義方法 †
詳しくは、コチラを
リンクのさせ方 †
初期設定が完了していること。
JS †
Scripts.Renderメソッドと<asp:ScriptManager?>タグを使用する方法がある。
CSS †
webopt:bundlereferenceと言うタブを使用するもよう。
<title>・・・</title>
<asp:PlaceHolder runat="server">
<%: Scripts.Render("~/bundles/modernizr") %>
</asp:PlaceHolder>
<webopt:bundlereference runat="server" path="~/bundles/css" />
ScriptReference? †
カスタマイズ †
ScriptReference?は、jQueryなどのファイルのバージョンとCDNを指定できない。
ただし、次のようにマッピングをカスタマイズすれば、動作をカスタマイズして任意のCDNから任意のバージョンを取得できる。
var mapping = ScriptManager.ScriptResourceMapping;
// Map jquery definition to the Google CDN
mapping.AddDefinition("jquery", new ScriptResourceDefinition
{
Path = "~/Scripts/jquery-2.0.0.min.js",
DebugPath = "~/Scripts/jquery-2.0.0.js",
CdnPath = "http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js",
CdnDebugPath = "https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.js",
CdnSupportsSecureConnection = true,
LoadSuccessExpression = "window.jQuery"
});
ScriptBundle?との関連 †
同じような疑問を持つ人がいる。
以下に回答がある。
- MsAjaxJs?
- ScriptManager?
ScriptManager.ScriptResourceMapping.AddDefinition("MsAjaxBundle", new ScriptResourceDefinition
{
Path = "~/bundles/MsAjaxJs",
CdnPath = "http://ajax.aspnetcdn.com/ajax/4.5/6/MsAjaxBundle.js",
LoadSuccessExpression = "window.Sys",
CdnSupportsSecureConnection = true
});
PreApplicationStartCode.AddMsAjaxMapping("MicrosoftAjax.js", "window.Sys && Sys._Application && Sys.Observer");
結論としては、
- ScriptManager?の中から、ScriptBundle?を組み合わせて使っている。
- PreApplicationStartCode?は、ScriptManager?内部の実装であり、
ScriptManager?内でCDNフォールバックも定義されている。
となる。
基本的な事項は、コチラを参照。
機能概要 †
ASP.NET Web FormsのRouteConfigでは、
ファイルの拡張子(*.aspxなど)をURLに付与しなくても済むよう、
「ASP.NET Friendly URLs」と言う機能を追加できる。
設定方法 †
インストール †
「ASP.NET Friendly URLs」のインストール
Install-Package Microsoft.AspNet.FriendlyUrls
定義方法 †
参考 †
Bundle と Minification †
Tags: :.NET開発, :ASP.NET, :ASP.NET Web Forms, :OWIN, :NuGet, :移行