asp.net – IIS如何知道它是服务于一个网站还是一个Web应用程序项目?

我了解网站项目即时编译源代码,Web应用程序项目将源代码编译成DLL(非常像ASP.Net 1.x).

但是如何在IIS中指定差异?

我知道Visual Studio知道 – 每个都有不同的项目,但是运行的实例(IIS框架)必须知道正在使用哪个编译模型,对吗?因为它是否知道是否即时编译?

一个请求进来,点击一个ASPX文件…以及该进程如何知道相关的CS文件是否需要编译(网站),或者是否在部署前已经完成(Web Application)?

我只是好奇指出这个差异.在web.config的某个地方?

解决方法

这些项目类型中的.aspx文件一个微妙的区别.

如果你看一个网站项目,你应该看到这样的东西…

<%@ Page Language="C#" AutoEventWireup="true"  
CodeFile="Default.aspx.cs" Inherits="_Default" %>

… Web应用程序项目将具有这样的.aspx文件

<%@ Page Language="C#" AutoEventWireup="true" 
CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>

请注意,第一个具有CodeFile属性,第二个具有CodeBehind属性.这是区分的地方.

CodeBehind属性不会在运行时使用 – 它可以告诉VS.NET代码所在的位置,Inherits属性告诉运行时在二进制文件中要搜索哪个类.

CodeFile属性在运行时使用,由aspnet_compiler.exe用于生成代码,然后使用Inherits属性.

有关这些属性的更多信息,请看这里…

http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx

但是要回答你的问题“IIS如何知道?答案是“它不”. ASP.NET知道.

您可以通过执行以下操作来证明是这样的:

>创建一个新的Web应用程序.这将包括一个Default.aspx和一个Default.aspx.cs.
>将以下代码添加到Default.aspx.cs中:

protected void Page_Load(object sender,EventArgs e)
{
    Response.Write("hello");
}

>编译项目,运行它,看看
文本“hello”出现在浏览器中.
>现在,更改代码看起来
像这样,并保存.cs文件

protected void Page_Load(object sender,EventArgs e)
{
    Response.Write("goodbye");
}

>不要配合刷新浏览器您仍然会看到“hello”,因为编译代码仍然使用此字符串.>现在,将Default.aspx中的属性从CodeBehind更改为CodeFile.保存此文件.>刷新浏览器.你会看到“再见”显示.>在你的代码中改变“再见”到“我相信!”.保存.aspx.cs但不编译.>刷新浏览器,看“我相信!”,在房间里跳舞,启发:-)

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....