对于Web项目,Asp.Net仅检测aspx中的更改,但不检测cs文件中的更改

时间:2009-04-24 22:01:18

标签: c# asp.net assemblies asp.net-2.0


Q1 - Asp.Net能够检测您何时更改原始文件,并在下次请求到达时自动重新编译应用程序


A)但看起来虽然网站Asp.Net能够检测到变化,无论它们是在代码隐藏文件(.cs)还是在aspx文件中发生,但是Web项目Asp.Net只能检测到变化发生在aspx文件中,但它没有检测.cs文件内的变化!那是为什么?


B)Asp.Net还会检测是否有任何新的aspx或cs文件被添加到网站。但是,它会在下一个请求中编译添加的文件,还是会重新编译应用程序的所有文件?


C)如果Web服务器上的应用程序包含多个aspx文件,一些由web项目创建(因此它们的代码隐藏在单个程序集中),而其他aspx文件是通过一个网站项目创建的,Asp.Net是怎样的能够弄清楚特定的aspx文件是否包含在Bin目录中的程序集中的代码?


Q2 “Codebehind属性仅由Visual Studio Web窗体设计器使用。该属性在运行时不使用。“

  • 我假设CodeBehind属性在运行时没有被使用,因为所有.cs文件都被编译成单个程序集,因此只要aspx通过aspx通过类告知类的名称,VS就没有问题。继承属性?!

  • 另一方面,模型背后的Asp.Net代码确实需要src属性,因为这里cs文件被编译成单独的程序集,因此asp.net需要知道CodeFile属性指定的文件的名称,所以它可以以某种方式找出该文件编译到的程序集的名称?


感谢名单

2 个答案:

答案 0 :(得分:2)

Q1 a:这是因为网站动态编译和Web应用程序是显式编译的。有关比较这两种类型的表,请参阅This article

Q1 b:默认情况下,所有内容都将重新编译。但是,已发布.net 3.5 sp1(Knowledgebase articledownloads)的修补程序,允许您选择是否要重新编译所有内容,或者是否只需要编译已更改的文件。

答案 1 :(得分:2)

如果ASP.NET无法找到在现有程序集中完成ASPX编译所需的类型,那么它只查找文件后面的代码。只有在构建ASPX文件的临时程序集时才需要依赖cs文件后面的代码。

因此,在web项目中,所有代码隐藏的cs文件都被编译成单个程序集,ASPX的临时程序集的编译不需要cs后面的代码,因为所需的类型已经存在于pre中 - 组装。因此,临时程序集和cs文件之间不会产生任何依赖性,因此更改cs文件不会使现有临时程序​​集无效。请注意,在部署中,甚至不会出现cs文件。

在网站中没有包含代码隐藏中所有类型的预构建程序集,因此需要代码隐藏文件来完成ASPX的临时程序集,反过来又增加了对cs文件的依赖性那个临时集会。因此,对cs文件的任何更改都会使临时程序集无效。