配置错误--分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

本文详细介绍了IIS6应用程序池的配置方法及其重要性。涵盖了应用程序池的基础概念、如何根据需求设置数量及配置属性等内容,帮助读者理解应用程序池在IIS6中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在部署网站的时候,很容易遇到这个一样错误:分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

   

   错误如图:

    错误原因:

       部署网站时,使用的应用程序池版本不对!

    解决方案:

       我的应用程序是在.NET 4.0下开发的,所以应用程序池应使用.NET4.0版本。如果您的电脑上没有安装相应版本的框架,下载一个安装上即可。

     Win7下更改操作

      

  

附:IIS应用程序池配置解析《摘抄》

 

 应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置。因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。

Windows 2003同时支持两种工作模式,默认为IIS 6.0工作进程隔离模式。工作进程隔离模式防止一个应用程序或站点停止了而影响另一个应用程序或站点,大大增强了IIS的可靠性。那么如何设置两种工作模式呢?

启动IIS管理器,右击网站,选择“属性”,打开属性对话框(图1)。在IIS 6.0工作进程隔离模式下,所有的应用程序代码都在隔离环境中运行,它们是如何进行隔离的呢?Windows 2003新增了应用程序池,工作进程隔离模式允许客户创建多个应用程序池,每个应用程序池都可以有不同的配置。因为这些应用程序池直接从内核(而非WWW服务)接收它们的请求,所以性能和可靠性得到了增强。要隔离运行在同一台计算机上但属于不同网站的Web应用程序,需要为每个网站创建单独的应用程序池。


图1


图2

下面用比较通俗的话解释一下:

1.静态站点用DW设计好后,本地即可查看网页,而动态站点则不同,需要用iis挂接后才能查看。这也是HTML(静态站点)和ASP(动态站点)的不同点之一:HTML不需要调用内存和cpu进行换算,而ASP需要调用内存和cpu进行换算后方可呈现在用户面前。因为ASP需要把程序的代码翻译成服务器可以识别的1和0,再通过IIS的导出生成HTML代码。

2.HTML,对于服务器端几乎无任何负载,因为是直接输出到客户端,客户端的浏览器(如IE)即系HTML代码后,输出成我们所见到的漂亮的网页排版、界面。ASP,服务器端需要分配内存用以解析程序代码成计算机代码,从而输出HTML代码到客户端,最后客户端的IE解析HTML代码成为我们看到的漂亮界面。ASP比HTML多出了一步,服务器对程序代码的处理。

3.应用程序池就是可以看成装载计算机分配给动态网站的内存的容器。如果内存是水,那么应用程序池就是鱼缸,动态网站就是鱼缸中的金鱼。多个动态网站可以存在于同一个应用程序池里,即鱼缸中可以放多条金鱼。当然,如果金鱼多了,鱼缸中的空间有限,金鱼之间就会争抢空间,不是很坚固的鱼缸可能就会破裂,所有金鱼都会受到影响。即是动态网站多了,内存不足,可能会造成内存级别的溢出漏洞,影响所有在那个应用程序池上的动态网站。

4.一般一个动态网站,需要新建一个应用程序池,来分配内存和cpu资源,而不是多个网站存在于同一个应用程序池中。这样做的好处是一个应用程序池对应唯一一个进程,一个进程对应一个PID(在任务管理器中可以查到)。所以如果某个网站出了问题,占用很多cpu,在任务管理器中可以查到。若是多个网站共享一个应用程序池,那么就不能定位是哪个网站出问题了。所以服务器中一般一个网站对应一个应用程序池,当然这要内存足够大作为前提条件。

5.一般而言,内存不是很大的情况下是用一个应用程序池对应多个网站的,共享内存资源可以节约服务器内存。

6.IIS设计的时候,考虑到应用程序可能会在运算途中出错,导致后续的请求不能处理。所以,IIS的应用程序池是有一个自动回收的机制。右键属性可以看到。回收的时候,原来鱼缸的水(内存的数据)会倒掉,重新换新的。

7.当一个IIS服务,只提供一个“站点”(使用80端口),不需设置主机头。

当一个IIS服务,提供n个“站点”(公用80端口),则需要设置n-1个主机头。

当一个IIS服务,提供n个“站点”(各个站点有自己的端口,各不相同),不需设置主机头。

(主机头可以理解为网站的域名)

8.客户端访问网站域名的流程如下:

客户端浏览器发出请求 -> 查找本地PC的DNS(host文件) -> 查找网络上的DNS -> 获得服务器的IP -> 客户端访问目网站 -> 目的网站服务器检查自己所有的网站,看看哪个和客户端提出的域名匹配 -> 若无匹配,则返回错误页面;若匹配,则返回正常网页。

当一个IIS服务,提供n个“站点”(公用80端口),则需要设置n-1个主机头。

IIS 6的核心在于工作进程隔离模式,而应用程序池则是定义工作进程如何进行工作,因此,可以说应用程序池是整个IIS 6的核心。和IIS 5中只能使用单个应用程序池不同,工作在工作进程隔离模式的IIS 6可以创建多个应用程序池,不同的应用程序池之间是完全隔离的,某个应用程序池停止服务时不会影响到其他应用程序池。

在使用应用程序池之前,你应该确定你所需要的应用程序池数量。可能有很多朋友会认为,既然不同的应用程序池之间是完全隔离的,那么我只需要为每个Web站点创建一个应用程序池就可以了。这个办法在IIS服务器上具有较少的Web站点数量时可以使用,但是如果IIS服务器上具有很多Web站点数量,那么这个办法就不适用了,因为不同的应用程序池在被访问时都会创建各自的工作进程,当大量的工作进程并发工作时会消耗大量的系统资源和CPU利用率,反而会降低服务器性能。你应该根据Web站点的重要性、隔离性、所运行代码的安全性和稳定性等来对IIS服务器上所具有的Web站点进行划分,然后根据情况来决定所需要的应用程序池数量。对于那些非常重要的Web站点、需要单独隔离的Web站点、所运行代码稳定性和安全性并不可靠的Web站点配置为使用各自独立的应用程序池,而将其他普通的Web站点配置为使用一个公共的应用程序池。

默认情况下,在安装IIS时会创建一个默认网站并创建一个名为DefaultAppPool的应用程序池为其使用;默认配置下的应用程序池已经可以很好的进行工作,建议你只有在特别需要时才对应用程序池进行配置。

应用程序池配置属性

在IIS管理控制台中展开应用程序池文件夹,然后右击对应的应用程序池,点击属性,你可以在应用程序池的属性中进行以下配置:

回收

回收标签,你可以设置工作进程的回收方式:

460×429

  • 回收工作进程(分钟):在工作进程运行多少分钟后回收工作进程,默认启用,并且设置为1740分钟(29小时);

  • 回收工作进程(请求数目):在工作进程处理多少 个HTTP请求后终止此工作进程,默认禁用,如果启用则默认值为35000

  • 在下列时间回收工作进程:在指定的时间回收工作进程,默认禁用;如需启用,勾选后点击添加按钮添加回收的时间即可,使用24小时制定义回收的时间;

  • 消耗太多内存时回收工作进程:

    • 最大虚拟内存(兆):当工作进程使用的虚拟内存达到设置的值时回收工作进程,默认禁用,如果启用则默认值为500 M;建议设置为不超过虚拟内存总数的70%;

    • 最大使用的内存(兆):当工作进程使用的物理内存达到设置的值时回收工作进程,默认禁用,如果启用则默认值为192 M;建议设置为不超过物理内存总数的60%;

另外需要注意的是,应用程序池具有以下两种工作进程回收方式,不过这两种回收方式均不会造成Web服务的中断:

  • 默认情况下,应用程序池使用重叠回收方式。在这种方式下,当应用程序池要关闭某个工作进程时,会先创建一个工作进程,直到新的工作进程成功创建后才关闭旧的工作进程;

  • 应用程序池也可以先关闭旧的工作进程,然后再创建新的工作进程。

如果Web应用程序不支持多实例运行,那么你必须配置应用程序池禁止使用重叠回收方式。此配置无法在IIS管理控制台中进行修改,只能通过在metabase.xml中修改对应应用程序池的DisallowOverlappingRotation metabase属性为true进行。 

性能

性能标签你可以设置工作进程的运行方式:

460×429

  • 在空闲此段时间后关闭工作进程(分钟):当工作进程空闲多少分钟后关闭此工作进程,这降低了空闲工作进程对系统资源和CPU性能的消耗,默认启用并且设置为20分钟;

  • 核心请求队列限制为(请求次数):当HTTP.sys接收到某个客户端发送的HTTP请求时,如果处理此请求的对应应用程序池的工作进程还处于忙状态,则HTTP.sys将接收到的请求保存在对应应用程序池的请求队列中,直到工作进程空闲为止。此选项即用于设置此应用程序池的请求队列所能容纳的请求数量,默认情况下每个应用程序池的请求队列限制为保留1000个请求,如果超出则向客户端返回503错误,你可以根据需要适当进行修改,最大可以设置为65535。但是如果设置太大则会消耗大量的系统资源 ,而设置太小会导致客户端访问时频繁出现503错误。

  • 启用CPU监视:监视此应用程序池的CPU使用率,默认未启用;如果某个应用程序池占用的CPU利用率过多,那么可以通过配置此选项来限制此应用程序池;

    • 最大CPU使用率(百分比):所设置的应用程序池所能使用的最大CPU使用率;启用CPU监视时默认值为100;

    • 刷新CPU使用率(分钟):刷新CPU使用率的间隔时间;启用CPU监视时默认值为5;

    • CPU使用率超过最大使用率时执行的操作:当此应用程序池的CPU使用率超过所设置的最大CPU使用率时所进行的操作,启用CPU监视时默认为,此时IIS只是在事件日志中进行记录而不进行其他操作;如果选择为关闭,那么IIS将关闭此应用程序池中的所有工作进程;

  • Web园:在Web园中你可以配置此应用程序池所使用的最大工作进程数,默认为1,最大可以设置为4000000; 配置使用多个工作进程可以提高该应用程序池处理请求的性能,但是在设置为使用多个工作进程之前,请考虑以下两点:

    • 每一个工作进程都会消耗系统资源和CPU占用率;太多的工作进程会导致系统资源和CPU利用率的急剧消耗;

    • 每一个工作进程都具有自己的状态数据,如果Web应用程序依赖于工作进程保存状态数据,那么可能不支持使用多个工作进程。

运行状况

运行状况标签你可以配置应用程序池监视工作进程的运行状况,

460×428

  • 启用Ping:默认情况下应用程序池配置为每隔30秒Ping工作进程,当工作进程没有进行响应时,则认为此工作进程出现故障并默认配置为关闭此工作进程。你可以修改Ping的时间间隔,但是太长的Ping间隔可能会导致Web服务的中断,而太短的Ping间隔又会消耗更多的系统资源和CPU利用率,因此建议你保留默认配置;

  • 启用快速失败保护:如果Web应用程序代码编写有问题,它可能会导致工作进程持续出现问题。默认情况下应用程序池配置为启用快速失败保护,当工作进程在配置的时间段(默认为5分钟)内发生的失败次数超过了配置的值(默认为5次),则禁用此应用程序池。

  • 启动时间限制:IIS等待属于此应用程序池的工作进程启动的时间,当工作进程启用时间超出此设置值时,IIS会在事件日志中进行记录;

  • 关闭时间限制:当IIS检测到某个工作进程出现故障时,将此工作进程标记为关闭,此选项指定了IIS等待工作进程自动关闭的时间限制,如果超出此时间限制后工作进程尚未关闭,则IIS强行关闭工作进程。

标识

标识标签,你可以配置工作进程所运行的用户账户。在IIS 5或者当IIS 6运行在IIS 5隔离模式时,工作进程运行在本地系统账户,而运行在工作进程隔离模式下的IIS 6的工作进程运行在网络服务账户下,这降低了系统被攻击的可能性。

你可以配置工作进程运行在预定义的本地系统本地服务网络服务账户下,也可以配置为使用某个自定义的用户账户。建议使用默认的网络服务账户;不过如果为了更高的安全性,可以配置使用自定义的用户账户,不过建议你只是将此自定义用户加入到IIS_WPG用户组中,因此IIS_WPG用户组包含了可以启动和运行工作进程的最小权限。

460×430

 



#ifndef __BSP_UART4_H_ #define __BSP_UART4_H_ #include "sys.h" extern void Uart4_Init(const u32 baud_rate); extern void Uart4_Tx_write2buff(const u8 dat); extern void Uart4_RX_ISR_PC(void); extern void Uart4_TX_ISR_PC(void); #endif /* __BSP_UART4_H_ */ #include "bsp_uart4.h" #if UART4_ENABLE struct Uart_Type_t Uart4; /***************************************************************************** 函 数 名 : void Uart4_Init(u32 baud_rate) 功能描述 : 串口4初始化 输入参数 : baud_rate 波特率 输出参数 : 修改历史 : 1.日 期 : 2022年3月9日 作 者 : LYN 修 改 : cuijia *****************************************************************************/ void Uart4_Init(const u32 baud_rate) { u16 i, baud; Uart4.id = 2; Uart4.Tx_Read = 0; Uart4.Tx_Write = 0; Uart4.Tx_Busy = 0; Uart4.Rx_Read = 0; Uart4.Rx_Write = 0; Uart4.Rx_Busy = 0; Uart4.Rx_Flag = 0; for(i = 0; i < UART4_TX_LEN; i++) { Uart4.Tx_Buffer[i] = 0; } for(i = 0; i < UART4_RX_LEN; i++) { Uart4.Rx_Buffer[i] = 0; } P0MDOUT |= 0x03; //P0口输出配置 SCON2T= 0x80 ; //发送使能和模式设置 SCON2R= 0x80; //接受使能和模式设置 ES2R = 1; //中断接受使能 ES2T = 1; //中断发送使能 baud = FOSC/8.0/baud_rate; BODE2_DIV_H = (u8)(baud>>8);//波特率 = CPU 主频/(8*波特率) BODE2_DIV_L = (u8)baud; // P0MDOUT|=(1<<0); //p0^0 强推 TR4 = 0; EA = 1; //中断总控制位:中断是否打开由每个中断的控制位控制。 } /************************************************** 函 数 名 : void Uart4_Tx_write2buff(u8 dat) 功能描述 : 装载串口4发送缓冲 输入参数 : dat:预发送的数据 输出参数 : 修改历史 : 1.日 期 : 2022年3月9日 作 者 : LYN 修改内容 : 创建 ***************************************************/ void Uart4_Tx_write2buff(u8 dat) { /*装发送缓冲*/ Uart4.Tx_Buffer[Uart4.Tx_Write] = dat; /*缓冲队列写指针回头,读指针在前*/ if(Uart4.Tx_Read > Uart4.Tx_Write) { /*若缓冲区满,等待读指针前进*/ while((Uart4.Tx_Write) + 1 == Uart4.Tx_Read); } /*写指针前进*/ ++Uart4.Tx_Write; /*写指针即将回头*/ if(Uart4.Tx_Write >= UART4_TX_LEN) { /*若读指针在头,等待读指针前进*/ while(Uart4.Tx_Read == 0); /*写指针回头*/ Uart4.Tx_Write = 0; } /*空闲*/ if(Uart4.Tx_Busy == 0) { /*标志忙*/ Uart4.Tx_Busy = 1; /*485开启发送*/ TR4=1; /*触发发送中断*/ SCON2T |= 0x1; } } /**************************************************************************** * * 函 数 名 : void Uart4_RX_ISR_PC(void) interrupt 11 * 功能描述 : 串口 4中断接收函数 * 输入参数 : * 输出参数 : * *****************************************************************************/ void Uart4_RX_ISR_PC(void) interrupt 11 { EA = 0; //中断总控制位;所有中断关闭 SCON2R &= 0xFE; Uart4.Rx_Buffer[Uart4.Rx_Write] = SBUF2_RX; Uart4.Rx_Write++; Uart4.Rx_Write %= UART4_RX_LEN; EA = 1; //中断总控制位;中断是否打开由每个中断的控制位控制。 } /**************************************************************************** * * 函 数 名 : Uart4_TX_ISR_PC(void) interrupt 10 * 功能描述 : 串口 4中断发送函数 * 输入参数 : * 输出参数 : * ******************************************************************************/ void Uart4_TX_ISR_PC(void) interrupt 10 { EA = 0; //中断总控制位;所有中断关闭 SCON2T &= 0xFE ; if(Uart4.Tx_Read != Uart4.Tx_Write) { SBUF2_TX = Uart4.Tx_Buffer[Uart4.Tx_Read]; Uart4.Tx_Read++; Uart4.Tx_Read %= UART4_TX_LEN; } else { /*485关闭发送*/ TR4 = 0; Uart4.Tx_Busy = 0; } EA = 1; //中断总控制位;中断是否打开由每个中断的控制位控制。 } #endif #include "sys.h" #include "board.h" #include "task_disp.h" #include "task_factory.h" #include "task_hmi.h" #include "save_data_dgus.h" #include "framework.h" extern u16 task_timer_count; //#define Dgus_Send_Page_Time_Set 0x7000 //u16 Send_Page_Time_Count = 0, Pop_Time_Count = 0xFFFF; u8 use_sed[4]={0x12,0x13,0x23,0x1}; /* 微秒级延时 */ void delayus(unsigned char t) { char i; while(t) { for(i=0;i<50;i++) { i=i; } t--; } } void main() { INIT_CPU(); //系统初始化 PORT_Init(); //IO口初始化 FW_InitSystem(); T0_Init();//定时器0初始化 // T1_Init(); T2_Init();//定时器2初始化 // WDT_ON();//打开开门狗 喂狗在定时器T2中 BSP_InitUart();// 串口初始化 // T5L OS CPU初始化 initcpu(); ws2812_writ_byte(8); //LED初始化 //data_save_init();//数据改变自动保存初始化 //Uart_SendString(5, use_sed, 4); //Write_Dgus(0x0084, 0x01); while(1) { Uart4_Tx_write2buff(0x78); //测试 delayus(1000); Task_Factory_Uart(); //Uart_Read0xF00();//数据自动上传 /* 500ms更新一次数据显示 */ if(499 == task_timer_count % 500) { Task_UpdateDisplay();//相应页面显示刷新对应控件 } Task_Hmi_Uart();//响应用户业务需求 FW_ScanKey();//按键扫描 FW_SlotKeyEvent(); //data_change_sava();//数据改变自动保存 Clock();//时钟 } } C51代码编译后报错,报错信息如下: Build started: Project: T5L_OS *** Note: Rebuilding project, since 'Options->Output->Create Batch File' is selected. Rebuild target 'T5L51' compiling main.c... compiling task_disp.c... compiling task_factory.c... compiling task_hmi.c... 1_App\task_hmi.c(61): warning C280: 'frame': unreferenced local variable 1_App\task_hmi.c(61): warning C280: 'Uart_num': unreferenced local variable compiling framework.c... compiling fw_display.c... compiling fw_key.c... compiling board.c... compiling bsp_dgusii.c... compiling bsp_i2c.c... compiling bsp_io.c... compiling bsp_led.c... compiling bsp_norflash.c... compiling bsp_timer.c... compiling bsp_touch.c... compiling bsp_uart2.c... compiling bsp_uart3.c... compiling bsp_uart4.c... compiling bsp_uart5.c... compiling crc16.c... compiling save_data_dgus.c... compiling sys.c... assembling STARTUP_M5.A51... linking... *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: UART_READ0XF00/TASK_FACTORY *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: WDT_ON/BSP_DGUSII *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: WDT_OFF/BSP_DGUSII *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: WDT_RST/BSP_DGUSII *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _SETPININ/BSP_IO *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _GETPININ/BSP_IO *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _SETPINOUT/BSP_IO *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _NORFLASH_READ/BSP_NORFLASH *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _NORFLASH_WRITE/BSP_NORFLASH *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: FUNCTION_INIT/BSP_NORFLASH *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: FUNCTION_ALL/BSP_NORFLASH *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _START_TIMER/BSP_TIMER *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _GET_TIME_OUT_FLAG/BSP_TIMER *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _DELAY_MS/BSP_TIMER *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: _TOUCHSWITCH/BSP_TOUCH *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: DATA_SAVE_INIT/SAVE_DATA_DGUS *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS NAME: DATA_CHANGE_SAVA/SAVE_DATA_DGUS *** ERROR L127: UNRESOLVED EXTERNAL SYMBOL SYMBOL: _Uart4_Tx_write2buff MODULE: .\obj\main.obj (MAIN) *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: _Uart4_Tx_write2buff MODULE: .\obj\main.obj (MAIN) ADDRESS: 1002AD6H Program Size: data=45.3 xdata=4265 const=407 code=11798 Target not created. Build Time Elapsed: 00:00:02 分析并给出解决方法
最新发布
07-12
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值