在一个带有代码隐藏的ASP.NET网站中,.cs文件是在什么时候编译的?

简介:在一个带有代码隐藏的ASP.net网站中,* .cs文件在什么时候被编译?

上下文:一位从此离开的同事,将一个带有.cs代码隐藏的网站部署到共享服务器。 我对.cs文件进行了一些小改动,我应该在其中一个页面上反映但尚未出现。 我已经重新启动了应用程序池,但是我不愿重置服务器上的IIS,因为有很多其他团队的应用程序可能在同一台服务器上使用。

这适用于Web Application项目而不是Web Site项目,默认情况下是CodeFile ,并且不允许更改构建操作…

在ASP.NET Web Applications您有两种部署页面的方法; CodeFileCodeBehind 。 默认情况下,页面将始终使用CodeBehind但您可以更改此设置。

代码隐藏

CodeBehind 在编译/构建时将.cs文件编译到bin文件夹的.dll文件中,然后将其部署到Web服务器。 无需将.cs文件部署到Web服务器。 如果你这样做,它将只是坐在那里未使用。

要使用CodeBehind配置页面,请确保:

  • .aspx文件中的page指令包含CodeBehind="your.aspx.cs"
  • 解决方案资源管理器中的.cs.designer.cs文件的属性具有compilebuild-action

的CodeFile

这会导致ASP.NET 在服务器上即时编译.cs文件。 这意味着您的.cs文件需要部署到Web服务器。 这也意味着您的.cs文件不会在编译/构建时编译,因此不会内置到bin文件夹中的.dll中。

关键优势

使用CodeFile,您可以更改.cs文件并部署该文件以查看生产Web服务器上的更改。 无需重新部署。 无需回收应用程序池。 这在很多情况下都非常有用。

要使用CodeFile配置页面,请确保满足以下所有条件:

  • .aspx文件中的page指令包含CodeFile="your.aspx.cs"
  • 解决方案资源管理器中的.cs文件的属性具有内容的build-action
  • 解决方案资源管理器中的.designer.cs文件的属性具有nonebuild-action

笔记

  • 当使用CodeFile设置页面时,Intellisense不喜欢工作(您可以在编码时更改为CodeBehind,然后更改为部署)。
  • 如果从CodeBehind更改为CodeFile,则始终执行重建并重新部署(反之亦然)。 这是因为当页面是CodeBehind时, .cs被编译到bin文件夹中的.dll中,并且在您更改为CodeFile时将保留在那里。 CodeFile将在运行中进行编译,您将获得.dll 和动态编译代码中定义的相同代码/类,这将导致运行时错误。

对于我使用的设置,在构建项目时会编译.cs文件。 这意味着它是bin中需要更改的.dll,而不是直接的.cs文件。

.aspx文件可以随时更改,但我认为您需要重建项目才能使后面的代码生效。

我之前没有任何问题替换了单数.dlls(尽管这不是一个好习惯)。

显然你所做的应该是有效的。 检查是否已实施缓存。 否则,发布代码并部署dll,而不是.cs文件。 我建议你在上线之前在登台服务器上进行测试。