ASP.NET网站发布不会重新编译codebehind。
创始人
2024-09-19 12:30:22
0

在ASP.NET网站中,如果更改了codebehind文件的代码,通常需要重新编译整个网站以使更改生效。然而,有一种解决方法是使用动态编译来实现在不重新编译整个网站的情况下更新codebehind文件的代码。

以下是一个示例,演示如何使用动态编译来实现这一点:

  1. 首先,确保在Web.config文件中启用了动态编译。在 节点下添加以下代码:

  1. 在你的ASP.NET页面的CodeBehind文件中,添加以下代码:
private void Page_Init(object sender, EventArgs e)
{
    // 检查是否存在编译错误
    if (HttpContext.Current.Application["CompilationError"] != null)
    {
        // 如果存在编译错误,抛出异常并显示错误信息
        throw new Exception((string)HttpContext.Current.Application["CompilationError"]);
    }
}

private void Page_Load(object sender, EventArgs e)
{
    // 在页面加载时,动态编译codebehind文件
    CompileCodeBehind();
}

private void CompileCodeBehind()
{
    // 获取当前页面的类型
    Type pageType = this.GetType();

    // 获取当前页面的文件路径
    string pageFilePath = this.AppRelativeVirtualPath.Replace("~", "");

    // 创建编译器参数
    CompilerParameters compilerParams = new CompilerParameters();
    compilerParams.GenerateInMemory = true;
    compilerParams.IncludeDebugInformation = true;
    compilerParams.ReferencedAssemblies.Add("System.dll");

    // 获取当前页面的代码
    string codeBehindCode = File.ReadAllText(Server.MapPath(pageFilePath));

    // 创建C#代码提供程序
    CSharpCodeProvider codeProvider = new CSharpCodeProvider();

    // 编译codebehind文件
    CompilerResults compilerResults = codeProvider.CompileAssemblyFromSource(compilerParams, codeBehindCode);

    // 检查是否有编译错误
    if (compilerResults.Errors.HasErrors)
    {
        // 如果有错误,将错误信息存储在Application对象中,以便在下一次加载页面时抛出异常
        string errorMessage = "";
        foreach (CompilerError error in compilerResults.Errors)
        {
            errorMessage += error.ErrorText + "\n";
        }
        HttpContext.Current.Application["CompilationError"] = errorMessage;
    }
    else
    {
        // 如果编译成功,将新编译的程序集加载到AppDomain中
        Assembly compiledAssembly = compilerResults.CompiledAssembly;
        HttpRuntime.CodegenDir = compiledAssembly.CodeBase;
    }
}
  1. 在你的ASP.NET页面中,添加以下代码:
protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    Page.Init += Page_Init;
    Page.Load += Page_Load;
}

这样,每当页面被加载时,都会检查是否有编译错误,并且如果没有错误,将会动态编译codebehind文件。如果有编译错误,则会抛出异常并显示错误信息。

请注意,这只是一个简单的示例,实际使用中可能需要根据自己的需求进行一些修改。此外,动态编译也可能会带来一些性能开销,因此请谨慎使用。

相关内容

热门资讯

此事引发广泛关注"功... 此事引发广泛关注"功夫川麻小程序有挂吗"一贯存在有辅助神器(哔哩哔哩)运功夫川麻小程序有挂吗辅助工具...
透视了解"越乡游义乌... 透视了解"越乡游义乌透视软件"切实是有辅助教程(哔哩哔哩);1、越乡游义乌透视软件模拟器是什么优化,...
黑科技辅助挂"乐酷辅... 黑科技辅助挂"乐酷辅助"一贯是有辅助插件(哔哩哔哩)1、任何乐酷辅助透视是真的假的的玩家都可以机会成...
据监测"新518互游... 据监测"新518互游脚本"切实真的是有辅助攻略(哔哩哔哩)1、任何新518互游脚本透视是真的假的的玩...
透视好友"葫芦娃七子... 透视好友"葫芦娃七子连心攻略"好像真的是有辅助插件(哔哩哔哩)进入游戏-大厅左侧-新手福利-激活码辅...
透视总结"友友联盟免... 透视总结"友友联盟免费辅助器"确实是真的有辅助攻略(哔哩哔哩)1、友友联盟免费辅助器脚本辅助下载、友...
值得注意的是"广西友... 值得注意的是"广西友乐软件辅助"真是存在有辅助器(哔哩哔哩)广西友乐软件辅助破解侠是真的助透视。每个...
透视智能ai"爱来掌... 透视智能ai"爱来掌中宝有没有挂"好像是有辅助插件(哔哩哔哩)暗藏猫腻,小编详细说明爱来掌中宝有没有...
透视好牌"佛手在线破... 透视好牌"佛手在线破解"竟然确实有辅助app(哔哩哔哩)1、每一步都需要思考,不同水平的挑战会更加具...
透视好友房"微乐智能... 透视好友房"微乐智能辅助app"果然真的有辅助器(哔哩哔哩)1、微乐智能辅助app透视辅助软件激活码...