我使用默认的“允许此预编译站点可更新”多次构建一个网站,但是在最近的编译中,网站非常破碎。在玩了.dll之后(删除并替换它们,在bin中)我注意到网站的某些部分再次开始工作,但是如果我把所有原始的.dll放在网站上都被打破了。
我正在使用带有多个Ajax Web扩展的aspx页面。这些是最近添加的,可能是问题的根源。我取消选中“允许这个预编译的站点可以更新”,它将各种额外编译的代码文件添加到bin中,并且网站的所有问题都消失了......这里发生了什么?有什么区别?
我更新网站的方式似乎没有任何差别,每次只是从Visual Studio直接发布。
任何见解都将不胜感激。
答案 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页面才能正确运行。这意味着如果没有重新赘述,网站将无法对其进行任何更改。