private static void RegisterJS()
        {
            BuildProvider.RegisterBuildProvider(".js", typeof(StaticBuildProvider));
            WebPageLocatorFactory.RegisterLocator(".js", StaticPageLocator.Instance);
            WebPageExtensions.Register(".js");

#if (DEBUG)
            _watchers.Add(PageUtil.WatchFiles(".js", (file, virtaulPath) =>
            {
                if (!StaticBuildProvider.IsIgnore(virtaulPath))
                {
                    StaticBuildProvider.RemoveCache();
                }
            }));
#endif
        }
        private static void RegisterHTM()
        {
            WebPageLocatorFactory.RegisterLocator(".htm", XamlPageLocator.Instance);
            WebPageExtensions.Register(".htm");

            BuildProvider.RegisterBuildProvider(".htm", typeof(XPCBuildProvider));
            //在VS里执行生成时,App_Code下的cs文件会自动编译,如果某个文件生成失败,那么整个生成操作(包括htm)会终止并且报错
            //这就导致修改后的htm始终无法生成新的cs文件,因此,我们使用XPCBuildIgnoreProvider来让VS不执行cs的生成操作
            BuildProvider.RegisterBuildProvider(".cs", typeof(XPCBuildIgnoreProvider));

#if (DEBUG)
            _watchers.Add(PageUtil.WatchFiles(".htm", (file, virtualPath) =>
            {
                HtmlWatcher.Instance.OnChange(virtualPath);
            }));

            _watchers.Add(PageUtil.WatchFiles(".cs", (file, virtualPath) =>
            {
                CSharpWatcher.Instance.OnChange(virtualPath);
            }));
#endif
        }