MVC 5 - 预编译视图仅适用于命令提示符

时间:2017-07-14 17:35:21

标签: visual-studio-2013 asp.net-mvc-5 msbuild windows-10

我有一个奇怪的问题,希望有人可以帮助我。我有一台新的笔记本电脑,我试图在具有预编译视图的新机器上发布相同的ASP.NET MVC 5项目。但是,当我在发布时使用" 预编译"选中选项后,它不会创建预编译视图。现在,如果我复制它运行的确切命令并在命令提示符中运行它,则会创建预编译视图。

以下是详细信息。两台计算机都使用Visual Studio 2013 Update 5进行Windows 10周年更新(版本1607)。使用相同的发布配置文件在旧计算机上发布应用程序会生成预编译的视图。在新机器上,从" 发布网站"对话框运行没有错误,但没有生成预编译的视图。然后我将这个确切的命令复制到VS用于预编译的命令提示符:

C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v / -p C:\MyApp\obj\Release\AspnetCompileMerge\Source -c C:\MyApp\obj\Release\AspnetCompileMerge\TempBuildDir

当我运行它时,它在TempBuildDir\bin目录中创建了预编译的视图!

我可以在机器之间想到的唯一区别是Windows更新。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:0)

您使用Windows的x64版本吗?

您也可以手动设置$(AspnetCompilerPath):

msbuild.exe /p:AspnetCompilerPath="C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe"

或将其添加到您的项目中:

<PropertyGroup>
  <AspnetCompilerPath Condition=" '$(AspnetCompilerPath)'=='' " >C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe</AspnetCompilerPath>
</PropertyGroup>

我做了这个假设,因为Microsoft.Web.Publishing.AspNetCompileMerge.targets文件包含字符串:

 We can't use the in-place aspnet_compiler because it will output to the aspnet temp folder which is only suiteable to run on the current machine.

答案 1 :(得分:0)

我遇到了完全相同的问题。

压缩文件夹可能是一个问题(驱动器未压缩,但单个文件夹已压缩)。由于某些原因,不会生成.compiled文件。

这仍然适用于VS2019和MVC5。 (到目前为止,最新的工具链。可能是.NET Framework问题,与VS和MsBuild版本无关。)

该线程帮助我找到了解决方案(请参阅最后一个答案): https://social.msdn.microsoft.com/Forums/vstudio/en-US/cb6a4239-9765-4021-a7ab-e5ad3d8aef06/missing-compiled-files-when-publishing-an-aspnet-mvc-4-project-to-filesystem-on-tfs-build-server?forum=msbuild