当我通过visual studio部署asp.net应用程序时,我知道我可以检查Precompile during publish
并取消选中Allow precompiled site to be updateable
。
我希望使用msbuild
工具执行相同操作并使用/p:MvcBuildViews=true /p:EnableUpdateable=false
但是当我转到IIS
并打开视图时,他们仍然拥有其内容,这意味着它们未经过预编译, 对?
从VS发布时,它们应该具有行This is a marker file generated by the precompilation tool
。我错过了什么吗?
答案 0 :(得分:18)
使用ms build预编译asp.net视图
您应该使用参数/p:PrecompileBeforePublish=true
而不是/p:MvcBuildViews=true
。
MvcBuildViews
经常被误认为是激活后导致预编译视图的内容。其实。包含视图以构建进程只是一件事,但它不会将这些视图编译为项目二进制文件夹。
当我们选中复选框Precompile during publish
并取消选中文件发布选项上的复选框Allow precompiled site to be updateable
时,我们会在FolderProfile.pubxml
文件中获得以下属性设置:
<PropertyGroup>
<PrecompileBeforePublish>True</PrecompileBeforePublish>
<EnableUpdateable>False</EnableUpdateable>
</PropertyGroup>
因此,如果你想对msbuild工具做同样的事情,我们应该使用参数:
/p:PrecompileBeforePublish=true;EnableUpdateable=false
此外,由于这些参数存储在.pubxml
文件中(在解决方案资源管理器的“属性”节点中的“PublishProfiles”下)。它们现在设计为签入并与团队成员共享。这些文件现在是MSBuild文件,您可以根据需要自定义它们。要从命令行发布,只需传递DeployOnBuild=true
并将PublishProfile设置为配置文件的名称:
msbuild.exe "TestPrecompiled.csproj" /p:DeployOnBuild=true /p:PublishProfile=FolderProfile.pubxml
当然,您可以同时使用参数和.pubxml
文件,命令行中的参数将覆盖.pubxml
文件中的属性:
msbuild.exe "TestPrecompiled.csproj" /p:DeployOnBuild=true /p:PublishProfile=FolderProfile.pubxml /p:PrecompileBeforePublish=true;EnableUpdateable=false
发布完成后,打开发布文件夹中的.cshtml文件,我们将获得与从VS发布时一样的行This is a marker file generated by the precompilation tool, and should not be deleted!
:
有关详细信息,请参阅Precompiling ASP.NET WebForms and MVC Views with MSBuild。