但是如何在IIS中指定差异?
我知道Visual Studio知道 – 每个都有不同的项目,但是运行的实例(IIS框架)必须知道正在使用哪个编译模型,对吗?因为它是否知道是否即时编译?
一个请求进来,点击一个ASPX文件…以及该进程如何知道相关的CS文件是否需要编译(网站),或者是否在部署前已经完成(Web Application)?
我只是好奇指出这个差异.在web.config的某个地方?
解决方法
如果你看一个网站项目,你应该看到这样的东西…
<%@ 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但不编译.>刷新浏览器,看“我相信!”,在房间里跳舞,启发:-)