在带有代码隐藏的 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 中,您有两种部署页面的方法; CodeFileCodeBehind。默认情况下,页面将始终使用CodeBehind,但您可以更改此设置。

代码隐藏

CodeBehind 将您的 .cs 文件编译为您的 bin 文件夹中的 .dll 文件在编译/构建时,然后您将其部署到您的 Web 服务器。无需将 .cs 文件部署到您的 Web 服务器。如果你这样做了,它就会被闲置在那里。

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

.aspx 文件中的页面指令具有CodeBehind="your.aspx.cs" 解决方案资源管理器中.cs.designer.cs 文件的属性具有build-actioncompile

代码文件

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

主要优势

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

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

.aspx 文件中的页面指令有CodeFile="your.aspx.cs" 解决方案资源管理器中.cs 文件的属性具有build-actioncontent 解决方案资源管理器中.designer.cs 文件的属性具有build-actionnone

注意事项

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 文件是在啥时候编译的?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置一个简单的ASP.NET MVC C#项目? [关闭]

IIS 中 asp.net 本地网站的权限

预编译的 asp.net 网站报错

asp.net mvc 视图和强类型视图数据

asp.net网站与Web应用程序[重复]

asp.net计算网站访问量常用代码