出于性能原因,我想部署带有预编译视图的网站。所以我配置了UseMerge
和PrecompileBeforePublish
。
这是我的发布资料的一部分:
<PrecompileBeforePublish>True</PrecompileBeforePublish>
<EnableUpdateable>False</EnableUpdateable>
<UseMerge>True</UseMerge>
<SingleAssemblyName>Conwell.Administration.Views</SingleAssemblyName>
<DeleteAppCodeCompiledFiles>True</DeleteAppCodeCompiledFiles>
在UI中反映出来:
我的Conwell.Administration.Views.dll
已成功创建。但是在发布之后,我在每个View中都有一个额外的.precompiled
文件在我的bin文件夹中:
内容如下:
<?xml version="1.0" encoding="utf-8"?>
<preserve resultType="2" virtualPath="/Areas/Bookings/Views/SepaDebits/Detail.cshtml" hash="fffffffff9d57aef" filehash="1737cd4f2d0e" flags="110000" assembly="Conwell.Administration.Views" type="ASP._Page_Areas_Bookings_Views_SepaDebits_Detail_cshtml">
<filedeps>
<filedep name="/Areas/Bookings/Views/SepaDebits/Detail.cshtml" />
</filedeps>
</preserve>
我试图简单地删除它们,但随后网站只显示一个空白页面。我不喜欢那么多*.compiled
个文件。它们总计超过一千个。
他们用的是什么?视图引擎?是否有可能禁用它们?也许是自定义的ViewEngine?
到目前为止我只找到this thread,但它没有给出任何指示。
答案 0 :(得分:1)
对于ASP.NET Web应用程序中的可执行文件,编译器 具有.compiled文件扩展名的程序集和文件。该 程序集名称由编译器生成。 .compiled文件可以 不包含可执行代码。相反,它只包含信息 ASP.NET需要找到合适的程序集。
部署预编译的应用程序后,ASP.NET使用 Bin文件夹中的程序集用于处理请求。预编译 输出包括.aspx或.asmx文件作为页面的占位符。该 占位符文件不包含代码。它们的存在只是为了提供一种方法 为特定页面请求调用ASP.NET以及该文件 权限可以设置为限制对页面的访问。
来源:https://msdn.microsoft.com/en-us/library/e22s60h9(v=vs.85).aspx
您必须删除预编译步骤才能删除它们,或单独部署源代码。使用构建服务器实时编译。
我会离开他们。它们不会造成伤害。