更新到 .NET Framework 4.6 后预编译视图时出现问题

Trouble Precompiling Views After Updating to .NET Framework 4.6

我们正在将 ASP.Net (MVC 5) 项目从 .NET Framework 4.5.2 升级到 .NET Framework 4.6。我们还没有更新到 MVC 6。

我们将 MvcBuildViews 项目 属性 设置为 true。这在过去工作得很好,但在将项目的目标框架更改为“.NET Framework 4.6”后,我们在构建时收到以下错误:

error MSB6004: The specified task executable location "C:\windows\Microsoft.NET\Framework64\aspnet_compiler.exe" is invalid.

直接使用以下命令行调用 MSBuild.exe 时也会发生这种情况:

C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe .\Estream.sln /m /nologo /p:Configuration=Debug;Platform=Mixed Platforms /property:MvcBuildViews=true /t:build /v:m

有没有其他人遇到过类似的问题?使用 .NET Framework 4.6 我需要做些什么来预编译视图?

我知道 ICompileModule 和 RazorPreCompileModule as mentioned here,但我们没有使用 MVC 6。

如有任何帮助,我们将不胜感激。

很可能您没有设置 TargetFramework。你的第一个危险信号就是路径。注意:

C:\windows\Microsoft.NET\Framework64\aspnet_compiler.exe

如果您查看项目文件 (.proj),您会发现该路径是如何生成的;看起来像这样:

$(windir)\Microsoft.NET\Framework64$(TargetFrameworkVersionNumber)

奇怪...我们似乎缺少 TargetFrameworkVersionNumber 变量?这是要去哪里?

现在,如果您查看 TargetFrameworkVersionNumber 变量的设置方式,您会发现您可能缺少目标框架:

在 Visual Studio 2015 年,您的目标框架很可能是 4.6.1。所以,只需添加代码:

<PropertyGroup Condition=" '$(TargetFrameworkVersion)' == 'v4.6.1' ">
  <TargetFrameworkVersionNumber>v4.0.30319</TargetFrameworkVersionNumber>
</PropertyGroup>

理论上应该可以解决您的问题。至少,它对我们的团队有用。

希望对您有所帮助!