在带有代码隐藏的 ASP.NET 网站中,.cs 文件是在啥时候编译的?
Posted
技术标签:
【中文标题】在带有代码隐藏的 ASP.NET 网站中,.cs 文件是在啥时候编译的?【英文标题】:In an ASP.NET website with a codebehind at what point are the .cs files compiled?在带有代码隐藏的 ASP.NET 网站中,.cs 文件是在什么时候编译的? 【发布时间】:2014-02-03 18:06:21 【问题描述】:简介: 在带有代码隐藏的 ASP.net 网站中,在什么时候编译 *.cs 文件?
上下文: 一位后来离开的同事将一个带有 .cs 代码隐藏的网站部署到共享服务器。我对 .cs 文件做了一些小改动,我应该期望它会反映在其中一个页面上,但它还没有出现。我已经重新启动了应用程序池,但是我不愿意在服务器上重置 IIS,因为有几个其他团队的应用程序可能正在同一台服务器上使用。
【问题讨论】:
这是一个网站项目(文件->新网站),还是一个 Web 应用程序项目(文件->新项目)?它制造了巨大的差异。有 .csproj 文件吗? 我在目录中看不到 .csproj 文件。根据@Page 标签,我假设它是一个网站: 正如您从yetiman 的帖子中看到的那样,不幸的是您并不走运。它在您的 Page 属性中显示“代码隐藏”这一事实表明它是一个 Web 应用程序,而不是一个网站。您需要重新编译网站。 @Tobberoth 实际上,没关系。您可以在 Web 应用程序和网站中使用 CodeFile。我一直这样做。 @theyetiman 是的,我自己也看到过这样的例子,所以我知道它有效,但它得到官方支持吗?当我参加 .NET Web 开发的公司课程时,老师不知道这种可能性(这是微软支持的证书等课程)。 【参考方案1】:这适用于 Web Application
项目,而不是 Web Site
项目,默认情况下是 CodeFile
,并且不允许更改构建操作...
在 ASP.NET Web Applications
中,您有两种部署页面的方法; CodeFile
和 CodeBehind
。默认情况下,页面将始终使用CodeBehind
,但您可以更改此设置。
代码隐藏
CodeBehind 将您的 .cs 文件编译为您的 bin
文件夹中的 .dll 文件在编译/构建时,然后您将其部署到您的 Web 服务器。无需将 .cs 文件部署到您的 Web 服务器。如果你这样做了,它就会被闲置在那里。
要使用 CodeBehind 配置页面,请确保:
.aspx
文件中的页面指令具有CodeBehind="your.aspx.cs"
解决方案资源管理器中.cs
和.designer.cs
文件的属性具有build-action
或compile
。
代码文件
这会导致 ASP.NET 即时编译 .cs 文件在服务器上。这意味着您的.cs
文件需要部署到Web 服务器。这也意味着您的.cs
文件不会在编译/构建时编译,因此不会内置到bin
文件夹中的.dll
。
主要优势
使用 CodeFile,您可以更改 .cs
文件并部署仅该文件以查看生产 Web 服务器上的更改。无需重新部署。无需回收应用程序池。这在很多情况下都非常有用。
要使用 CodeFile 配置页面,请确保满足以下所有:
.aspx
文件中的页面指令有CodeFile="your.aspx.cs"
解决方案资源管理器中.cs
文件的属性具有build-action
的content
解决方案资源管理器中.designer.cs
文件的属性具有build-action
或none
。
注意事项
Intellisense 不喜欢在页面设置为 CodeFile(不过,您可以在编码时更改为 CodeBehind,然后再更改回去进行部署)。 如果您从 CodeBehind 更改为 CodeFile,则 总是 执行 重建和重新部署(反之亦然)。这是因为当页面是 CodeBehind 时,.cs
被编译到 bin 文件夹中的 .dll
中,并将
更改为 CodeFile 时仍保留在那里。代码文件将是
即时编译,您将获得相同的代码/类
.dll
和 在即时编译的代码中,这将导致
运行时错误。
【讨论】:
(响应“是否将CodeBehind="my.aspx.cs"
编译为.dll
?”)...不!这只是告诉 ASP.NET 运行时它应该被编译成.dll
,但如果不是,你会得到一个错误。您需要将 both 页面指令 和 .cs
(和 .designer.cs
)构建操作设置为 compile
如何获取*.cs
的属性?我没有看到该选项,如果我单击它并切换到属性窗口,我会看到 FullName 和 FullPath
@ebramtharwat 您可能正在开发web site
,而不是web application
。在这种情况下,我认为默认情况下所有内容都是CodeFile
,您无法更改它。不过,我可能是错的。在web application
中,您可以right-click > properties
查看构建操作。
我有一个网站,它是 CodeBehind
@ebramtharwat 抱歉,但我不知道如何提供帮助。我刚刚检查过,如果您在 VS 中创建一个新网站,它会创建 CodeFile 页面。我个人从不使用 Web Sites,只使用 Web Applications,所以我不确定是否有任何警告。【参考方案2】:
对于我使用的设置,.cs 文件是在构建项目时编译的。这意味着需要更改的是 bin 中的 .dll,而不是直接更改的 .cs 文件。
.aspx 文件可以随时更改,但我认为您需要重新构建项目才能使后面的代码生效。
我之前已经替换了单数 .dll 没有任何问题(尽管这不是一个好习惯)。
【讨论】:
【参考方案3】:显然你所做的应该有效。 检查是否已实施缓存。 否则发布代码并部署 dll,而不是 .cs 文件。我建议您在上线之前在登台服务器中进行测试。
【讨论】:
以上是关于在带有代码隐藏的 ASP.NET 网站中,.cs 文件是在啥时候编译的?的主要内容,如果未能解决你的问题,请参考以下文章