Dea*_*ane 12 asp.net iis compilation
据我所知,网站项目即时编译源代码,Web应用程序项目预编译源代码到DLL(很像ASP.Net 1.x).
但是如何在IIS中指定差异?
我知道Visual Studio知道 - 每个都有不同的项目,等等.但是运行实例(IIS + Framework)必须知道正在使用哪个编译模型,对吧?因为它如何知道是否即时编译?
请求进来,命中ASPX文件...以及进程如何知道是否需要编译关联的CS文件(Web站点),或者是否在部署之前已经完成(Web应用程序)?
我只是好奇指出了这种差异.在web.config的某个地方?
Mar*_*eck 21
您可以在这些项目类型中找到.aspx文件中的细微差别.
如果你看一个网站项目,你应该看到这样的东西......
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
Run Code Online (Sandbox Code Playgroud)
...作为Web应用程序项目将具有类似这样的.aspx文件...
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>
Run Code Online (Sandbox Code Playgroud)
请注意,第一个具有CodeFile属性,第二个具有CodeBehind属性.这就是区别所在.
CodeBehind属性不在运行时使用 - 它可以告诉VS.NET代码所在的位置,而Inherits属性告诉运行时要在二进制文件中搜索哪个类.
CodeFile属性在运行时使用,并由aspnet_compiler.exe用于生成代码,然后使用Inherits属性,如上所述.
有关这些属性的更多信息,请查看此处...
http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx
但要回答你的问题"IIS如何知道?" 答案是"它没有." ASP.NET知道.
您可以通过执行以下操作来证明这种情况:
将以下代码添加到Default.aspx.cs中:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("hello");
}
Run Code Online (Sandbox Code Playgroud)编译项目,运行它,看到文本"hello"出现在浏览器中.
现在,更改代码使其看起来像这样,并保存.cs文件:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("goodbye");
}
Run Code Online (Sandbox Code Playgroud)不要编译.刷新浏览器.你仍然会看到"你好",因为编译后的代码仍然使用这个字符串.
现在,将Default.aspx中的attrib从CodeBehind更改为CodeFile.保存此文件.
刷新浏览器.你会看到"再见".
将代码中的"再见"改为"我相信!".保存.aspx.cs但不编译.
刷新您的浏览器,看到"我相信!",并在房间里跳舞:-)
| 归档时间: |
|
| 查看次数: |
4553 次 |
| 最近记录: |