1

背景: HTML 5 Offline App Cache を使用して、マニフェスト ファイルを動的に構築しています。基本的に、マニフェスト ファイルには、ページが要求する各静的ファイルをリストする必要があります。ファイルが実際に静的な場合はうまく機能しますが、私は でバンドルと縮小を使用してSystem.Web.Optimizationいるため、ファイルは静的ではありません。

DEBUG シンボルが読み込まれると (つまり、VS でのデバッグ)、実際の物理ファイルが MVC ビューから呼び出されます。ただし、リリース モードでは、次のような仮想ファイルを呼び出します。/bundles/scripts/jquery?v=FVs3ACwOLIVInrAl5sdzR2jrCDmVOWFbZMY6g6Q0ulE1

だから私の質問: コードでその URL を取得してオフライン アプリ マニフェストに追加するにはどうすればよいですか?

私はもう試した:

        var paths = new List<string>()
        {
            "~/bundles/styles/common",
            "~/bundles/styles/common1024",
            "~/bundles/styles/common768",
            "~/bundles/styles/common480",
            "~/bundles/styles/frontend",
            "~/bundles/scripts/jquery",
            "~/bundles/scripts/common",
            "~/bundles/scripts/frontend"
        };

        var bundleTable = BundleTable.Bundles;
        foreach (var bundle in bundleTable.Where(b => paths.Contains(b.Path)))
        {
            var bundleContext = new BundleContext(this.HttpContext, bundleTable, bundle.Path);
            IEnumerable<BundleFile> files = bundle.GenerateBundleResponse(bundleContext).Files;
            foreach (var file in files)
            {
                var filePath = file.IncludedVirtualPath.TrimStart(new[] { '~' });
                sb.AppendFormat(formatFullDomain, filePath);
            }
        } 

に置き換えるだけGenerateBundleResponse()EnumerateFiles()なく、常に元のファイル パスを返すだけです。

代替の実装の提案も受け付けています。ありがとう。

更新: (7/7/14 13:45)

以下の回答と同様に、この Bundles Registry クラスを追加して、必要な静的ファイルのリストを保持し、すべてのブラウザーでデバッグ モードで動作するようにしました。(以下のコメントを参照)

    public class Registry
    {
        public bool Debug = false;
        public Registry()
        {
            SetDebug();
        }
        [Conditional("DEBUG")]
        private void SetDebug()
        {
            Debug = true;
        }

        public IEnumerable<string> CommonScripts
        {
            get
            {
                if (Debug)
                {
                    return new string[]{
                        "/scripts/common/jquery.validate.js",
                        "/scripts/common/jquery.validate.unobtrusive.js",
                        "/scripts/common/knockout-3.1.0.debug.js",
                        "/scripts/common/jquery.timepicker.js",
                        "/scripts/common/datepicker.js",
                        "/scripts/common/utils.js",
                        "/scripts/common/jquery.minicolors.js",
                        "/scripts/common/chosen.jquery.custom.js"
                    };
                }
                else
                {
                    return new string[]{
                        "/scripts/common/commonbundle.js"
                    };
                }
            }
        }
    }

私はこの解決策に決して満足していません。これを改善できる場合は、提案をしてください。

4

1 に答える 1