允许预编译的Visual Studio Web页面可更新的区别是什么?

时间:2012-08-15 19:22:45

标签: asp.net vb.net visual-studio dll precompiled

我使用默认的“允许此预编译站点可更新”多次构建一个网站,但是在最近的编译中,网站非常破碎。在玩了.dll之后(删除并替换它们,在bin中)我注意到网站的某些部分再次开始工作,但是如果我把所有原始的.dll放在网站上都被打破了。

我正在使用带有多个Ajax Web扩展的aspx页面。这些是最近添加的,可能是问题的根源。我取消选中“允许这个预编译的站点可以更新”,它将各种额外编译的代码文件添加到bin中,并且网站的所有问题都消失了......这里发生了什么?有什么区别?

我更新网站的方式似乎没有任何差别,每次只是从Visual Studio直接发布。

任何见解都将不胜感激。

2 个答案:

答案 0 :(得分:19)

取消选中“允许此预编译站点可更新”将编译.Aspx页面,而不仅仅是代码文件(.VB / .CS)。将其保留为允许您在部署之后对.Aspx文件进行某些更改而不进行重新编译(例如,移动控件的位置或添加一些额外的HTML标记)。

在阅读了部署问题的描述之后,错误似乎更可能是因为IIS需要刷新应用程序池。在低端VPS上,如果你有这种奢侈,有时候反弹(重启)它是有意义的。

有关站点预编译的详细信息,请阅读以下MSDN文章。

http://msdn.microsoft.com/en-us/library/399f057w(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/ms247286(v=vs.80).aspx

答案 1 :(得分:6)

根据NoAlias的说法,我对自己的问题有一个答案。我读了两个链接,发现了以下内容:

  

仅部署预编译
  预编译以进行部署时   只是,编译器几乎从所有ASP.NET生成程序集   通常在运行时编译的源文件。这包括   程序代码包含页面,.cs和.vb类文件,其他代码文件和   资源文件。编译器从中删除所有源和标记   输出。在生成的布局中,为每个生成编译的文件   包含的.aspx文件(扩展名为.compiled)   指向该页面的相应程序集的指针。要改变   网站,包括页面的布局,你必须改变原来的   文件,重新编译站点,并重新部署布局。唯一的例外   是网站配置;您可以更改Web.config文件   在生产服务器上,无需重新编译该站点。这个   选项为您的页面提供最大程度的保护   启动时的最佳表现。

     

部署和更新的预编译
  在预编译以进行部署和更新时,编译器   从所有源代码生成程序集(除了页面代码)   单文件页面)和通常生成的其他文件   程序集,例如资源文件。编译器转换.aspx文件   使用已编译的代码隐藏模型和副本的单个文件   他们到布局。此选项使您可以进行有限的更改   编译后,您的网站中的ASP.NET网页。对于   例如,您可以更改控件,颜色,字体的排列,   和页面的其他外观方面。您还可以添加控件   只要他们不需要事件处理程序或其他代码。当。。。的时候   站点第一次运行,ASP.NET执行进一步编译   为了从标记创建输出。注意

     

预编译的可更新站点不允许多个页面   引用相同的CodeFile类。

我最近对网站进行了更改,包括2个引用相同CodeFile的aspx页面(后台的VB代码相同)每个页面的html属性略有不同,但需要有相同的CodeFiles,所以对于我的第二个ASP页面我删除了自动生成的VB代码文件,然后在HTML中引用了不同的CodeFile。

如上所述,预编译的可更新站点不允许多个页面引用相同的代码文件类。这就是我的一些页面无效的原因。

从现在开始,我需要避免使用默认复选框“允许此预编译站点可更新”;我的网站必须保持未选中状态才能使用引用我的多个页面的VB CodeFiles。

结论:需要预编译引用相同CodeFile的多个aspx页面才能正确运行。这意味着如果没有重新赘述,网站将无法对其进行任何更改。