在一个带有代码隐藏的ASP.NET网站中,.cs文件是在什么时候编译的?
简介:在一个带有代码隐藏的ASP.net网站中,* .cs文件在什么时候被编译?
上下文:一位从此离开的同事,将一个带有.cs代码隐藏的网站部署到共享服务器。 我对.cs文件进行了一些小改动,我应该在其中一个页面上反映但尚未出现。 我已经重新启动了应用程序池,但是我不愿重置服务器上的IIS,因为有很多其他团队的应用程序可能在同一台服务器上使用。
这适用于Web Application
项目而不是Web Site
项目,默认情况下是CodeFile
,并且不允许更改构建操作…
在ASP.NET Web Applications
您有两种部署页面的方法; CodeFile
和CodeBehind
。 默认情况下,页面将始终使用CodeBehind
但您可以更改此设置。
代码隐藏
CodeBehind 在编译/构建时将.cs文件编译到bin
文件夹中的.dll文件中,然后将其部署到Web服务器。 无需将.cs文件部署到Web服务器。 如果你这样做,它将只是坐在那里未使用。
要使用CodeBehind配置页面,请确保:
-
.aspx
文件中的page指令包含CodeBehind="your.aspx.cs"
- 解决方案资源管理器中的
.cs
和.designer.cs
文件的属性具有compile
的build-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
文件的属性具有none
的build-action
。
笔记
- 当使用CodeFile设置页面时,Intellisense不喜欢工作(您可以在编码时更改为CodeBehind,然后更改为部署)。
- 如果从CodeBehind更改为CodeFile,则始终执行重建并重新部署(反之亦然)。 这是因为当页面是CodeBehind时,
.cs
被编译到bin文件夹中的.dll
中,并且在您更改为CodeFile时将保留在那里。 CodeFile将在运行中进行编译,您将获得.dll
和动态编译代码中定义的相同代码/类,这将导致运行时错误。
对于我使用的设置,在构建项目时会编译.cs文件。 这意味着它是bin中需要更改的.dll,而不是直接的.cs文件。
.aspx文件可以随时更改,但我认为您需要重建项目才能使后面的代码生效。
我之前没有任何问题替换了单数.dlls(尽管这不是一个好习惯)。
显然你所做的应该是有效的。 检查是否已实施缓存。 否则,发布代码并部署dll,而不是.cs文件。 我建议你在上线之前在登台服务器上进行测试。