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、点击下载安装,中至卧龙...
四分钟了解!闲来湖南跑胡子游戏... 四分钟了解!闲来湖南跑胡子游戏攻略,财神十三张开挂,切实教程(有挂规律)1、玩家可以在闲来湖南跑胡子...
十分钟了解!蜜瓜大厅有挂吗,老... 十分钟了解!蜜瓜大厅有挂吗,老友互娱有后台吗,AI教程(有挂普及)老友互娱有后台吗软件透明挂微扑克w...
三分钟了解!蛮籽重庆麻将有挂吗... 三分钟了解!蛮籽重庆麻将有挂吗,天天十三张有外挂没,透明教程(有挂黑科技)1、上手简单,内置详细流程...
1分钟了解!聚星扑克德州有假吗... 1分钟了解!聚星扑克德州有假吗,中至麻将打炸有挂的吗,曝光教程(有挂解说)小薇(透视辅助)致您一封信...
9分钟了解!乐乐上海斗地主有挂... 9分钟了解!乐乐上海斗地主有挂吗,边锋干瞪眼外挂效果,2025教程(有挂解说);1、乐乐上海斗地主有...
4分钟了解!雀魂外 挂,天天仙... 4分钟了解!雀魂外 挂,天天仙桃麻将有挂,科技教程(有挂黑科技)4分钟了解!雀魂外 挂,天天仙桃麻将...
6分钟了解!微信小程序途游辅助... 6分钟了解!微信小程序途游辅助器,心悦填大坑能控制发牌么,必赢方法(有挂透明)1、进入到心悦填大坑能...