为啥 aspnet_compiler 以可更新标志成功,但否则失败?

Posted

技术标签:

【中文标题】为啥 aspnet_compiler 以可更新标志成功,但否则失败?【英文标题】:Why does aspnet_compiler succeed with updateable flag, but fail otherwise?为什么 aspnet_compiler 以可更新标志成功,但否则失败? 【发布时间】:2013-02-23 21:26:06 【问题描述】:

我们正在研究预编译我们的网站以缩短网站启动时间的可行性。我们试图避免的是当用户访问该站点时对csc.exe 的任何调用。当 csc.exe 运行时,IIS 不会为任何额外的 HTTP 请求提供服务。这限制了我们向网站发布新二进制文件的频率和速度,因为部署代码和预热我们场中的每个 Web 服务器需要数小时。

我有 aspnet_compiler.exe 在可更新模式下编译站点(即使用 -u 标志),但经过测试,看起来 IIS 仍在调用 csc.exe 来编译控件/页面。

> aspnet_compiler -v / -p F:\Projects\Website\webroot -u F:\BuildOutput\Website 

所以,我尝试不使用 -u 标志,但现在出现编译错误:

> aspnet_compiler -v / -p F:\Projects\Website\webroot F:\BuildOutput\Website
/Tool/Controls/ToolCustomDateRangePicker.ascx(8): error ASPPARSE: Unknown server 
tag 'SharedControls:DateRangePicker'.

当我打开/Tool/Controls/ToolCustomDateRantPicker.ascx 时,它正确引用了SharedControls:DateRangePicker

<%@ Register TagPrefix="SharedControls" TagName="DateRangePicker" 
             Src="../../common/Controls/DateRangePicker.ascx" %>

什么给了? 为什么aspnet_compiler 可以在我的网站可更新时正确编译我的网站,但在编译时却失败了,所以它不可更新?

【问题讨论】:

【参考方案1】:

我有一个类似的问题 - 似乎使用 -u 选项实际上并没有编译内部代码 - 所以它需要在运行时编译。 来自:MSDN

当您使用此选项时,.aspx 文件中的代码块(即代码 位于脚本元素或 标记之间)不是 编译。因此,如果这些代码块中存在编译错误, 您只会在运行时看到错误,因为 .aspx 文件是 只有在那时才完全编译。使用此选项通常是不安全的 对于依赖 .aspx 文件中的代码块的网站。

【讨论】:

以上是关于为啥 aspnet_compiler 以可更新标志成功,但否则失败?的主要内容,如果未能解决你的问题,请参考以下文章

devenv VS aspnet_compiler

aspnet_compiler 不会编译放在 web 应用程序目录下的 c# 代码

如何在没有 web.config 的情况下为 aspnet_compiler.exe 指定 CompilerVersion?

aspnet_compiler 忽略目标目录并将 dll 留在 Temporary ASP.NET Files 目录中

为啥docker容器更新不稳定?

为啥 EditText 验证时会出现两个错误标志?