当我将 ASP.NET 项目部署到包含许多 ASCX 文件的服务器时,第一页加载可能需要一段时间,这可能是因为正在编译 ASCX 文件。不过,只有实际在页面上的那些才会被编译,所以我的部署过程的一部分是导航到网站上的一堆页面。导航到所有页面后,该站点即可顺利运行。
我宁愿 ASP.NET 在我部署时立即编译所有这些 ASCX 文件,以删除这个草率的部署步骤。
实现这一目标的最佳方法是什么?
当我将 ASP.NET 项目部署到包含许多 ASCX 文件的服务器时,第一页加载可能需要一段时间,这可能是因为正在编译 ASCX 文件。不过,只有实际在页面上的那些才会被编译,所以我的部署过程的一部分是导航到网站上的一堆页面。导航到所有页面后,该站点即可顺利运行。
我宁愿 ASP.NET 在我部署时立即编译所有这些 ASCX 文件,以删除这个草率的部署步骤。
实现这一目标的最佳方法是什么?
听起来您正在寻找ASP.NET 预编译:
您可以在网站项目可供用户使用之前对其进行预编译。这提供了许多优势,包括更快的初始响应时间、错误检查、源代码保护和高效部署。这在网页和代码文件频繁更改的大型站点中尤为重要。
您还可以使用 Web 应用程序项目模型来编译项目。在该模型中,项目中的所有代码文件(独立、代码隐藏和类文件)都编译为单个程序集并存储在 Bin 目录中。因为编译创建单个程序集,所以您可以指定属性,例如程序集名称和版本。如果不希望输出程序集位于 Bin 目录中,还可以指定输出程序集的位置。
如果您将 ASP.net 网站转换为“Web 应用程序”,则可以部署已编译的版本。在解决方案资源管理器中右键单击您的网站,然后单击“转换为 Web 应用程序”
您可以在您的 Web 解决方案上运行msbuild,它会编译您的代码,然后您可以沿着已编译的 .dll 部署标记。
执行此操作的示例 NAnt 脚本:
<target name="determineMsbuildPath">
<readregistry property="net.bin" key="SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath"/>
</target>
<target name="msbuild" depends="determineMsbuildPath>
<exec basedir="${net.bin}\" program="MSBuild.exe">
<arg value="${solution}"/> <!-- put the path to your web solution here -->
<arg value="/p:OutputPath=${workdir}"/>
</exec>
</target>