首页 > 解决方案 > 在 Sitefinity 11.2 中不再使用 Global.Application_Start 吗?

问题描述

application_start在 Global.asax.cs 文件中的方法永远不会运行。

我可以在使用 11.2 项目管理器创建的库存 Sitefinity 站点中重现这一点。如果我使用 Visual Studio 向其中添加 Global.asax.cs 文件,我定义的事件将永远不会运行。

最终,我只是想在升级到 11.2 的项目中注册自定义配置类型。

从 9.2 升级到 11.2 后,Global.asax.cs 中的代码不再运行。我可以将简单的日志记录代码放入Application_Start方法中,它永远不会被调用。我试过使用Debugger.Break(),我试过手动断点,我试过 IIS 和 IISExpress。它们都不起作用。

我认为 Sitefinity 11.2 中的某些东西劫持了标准应用程序启动,因此它从不运行这种非常标准的方法,但我不知道为什么或如何规避这一点。

我发现很多年前有人问过这个问题:Global.asax not fire on precompiled Sitefinity project,但没有答案。

我尝试了这两条评论的建议,但它们不适用于我,因为这不是已部署的站点,它在我的开发环境中。

这是我的 Global.asax.cs:

using System;
using System.IO;
using System.Threading;
using Telerik.Microsoft.Practices.Unity;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Configuration;
using SitefinityWebApp.Custom.Configuration;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {

            throw new Exception("I told you this wouldn't run.");

            logStartUpCall(string.Concat("Application started at: ", DateTime.Now));

            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
            Bootstrapper.Initialized += this.Bootstrapper_Initialized;

            //log call
            logStartUpCall(string.Concat("Call made to bootstrapper: ", DateTime.Now));
        }


        void Bootstrapper_Initialized(object sender, Telerik.Sitefinity.Data.ExecutedEventArgs e)
        {
            //log call
            logStartUpCall(string.Concat("Bootstrapper_Initialized:", " ", DateTime.Now));


            if (e.CommandName == "Bootstrapped")
            {
                ObjectFactory.Container.RegisterType<Telerik.Sitefinity.Workflow.IWorkflowDefinitionResolver, Nccer.Sitefinity.CustomWorkflowDefinitionResolver>();

                System.Web.Mvc.RouteCollectionExtensions.MapRoute(System.Web.Routing.RouteTable.Routes,
                    "Classic",
                    "Redirect",
                    new { controller = "Redirect", action = "Index" });

                Config.RegisterSection<MercuryConfiguration>();
            }

            //log call
            logStartUpCall(string.Concat("Bootstrapper Configuration & Registration complete:", " ", DateTime.Now));
        }

        protected void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            logStartUpCall(string.Concat("Bootstrapper_Bootstrapped:", " ", DateTime.Now));

            Nccer.Sitefinity.FeatherActionInvokerCustom.Register();

            logStartUpCall(string.Concat("Bootstrapper_Bootstrapped finished:", " ", DateTime.Now));
        }

        protected void logStartUpCall(string message)
        {

            TextWriter tw = new StreamWriter(System.Web.Hosting.HostingEnvironment.MapPath("/App_Data/SiteFinity/Logs/Startup.log"), true);

            // write a line of text to the file
            tw.WriteLine(message);

            // close the stream
            tw.Close();

        }
    }
}

我希望application_start调用该方法,但事实并非如此。未抛出异常,未完成日志记录,未注册模块。它就像它甚至不存在一样。

我一天中大部分时间都在为此工作,但我很茫然。

标签: asp.netsitefinity

解决方案


推荐阅读