【问题标题】:MvcBuildViews true causes "'/temp' is not a valid IIS application" errorMvcBuildViews true 导致“'/temp' 不是有效的 IIS 应用程序”错误
【发布时间】:2016-10-13 06:51:20
【问题描述】:

在我的.csproj 文件中将MvcBuildViews 设置为true 以便在构建期间编译视图后,我收到以下错误:

'/temp' 不是有效的 IIS 应用程序

我认为这里所指的“/temp”是编译视图的路径。这是.csproj 文件中的相关部分:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

我使用完整的 IIS 在我的本地机器上提供这个 MVC 5 网站(还没有在远程服务器上尝试过)。我是否需要在 IIS 中进行一些设置才能使MvcBuildViews 正常工作?

【问题讨论】:

  • 我也遇到了同样的问题,所以我开始赏金了。
  • &lt;MvcBuildViews&gt;true&lt;/MvcBuildViews&gt; 元素之后添加&lt;BaseIntermediateOutputPath&gt;..\bin&lt;/BaseIntermediateOutputPa‌​th&gt; 在大多数情况下都有效,通常在obj 目录中存在另一个web.config 文件时应用。
  • @TetsuyaYamamoto 这没有帮助。
  • 我也有类似的问题。但是我注意到如果我像下面那样手动将 -p 传递给 aspnet_compiler.exe,它会起作用。但是,我不知道如何告诉项目文件这样做。 C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v temp -p path-to-output

标签: asp.net-mvc iis visual-studio-2015 asp.net-mvc-5


【解决方案1】:

this,我猜你必须让IIS 虚拟目录名称temp 指向这个应用程序。

【讨论】:

  • 虽然这可能会解决问题,但我认为没有必要。要求我们所有的开发人员都进行设置并在我们的构建服务器上进行设置也是不切实际的。
【解决方案2】:

这是一个晦涩难懂的问题。正如上面 John Rutherford 所指出的,在所有构建服务器上创建一个“临时”Web 应用程序应该是没有必要且不切实际的。这是一个编译时问题,而不是运行时问题,因此甚至不应该涉及 IIS。

这就是答案;有相当数量的。感谢许多其他人也以各种方式对此进行了研究。

我正在使用截至 2021 年 7 月的所有内容:Visual Studio 2019、新的构建服务器 2019,以及来自 Visual Studio 2019 安装程序的最新构建工具和更新。

  1. .csproj 中的违规行是
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />

如果您阅读 AspNetCompiler 子句的规范,您会发现 VirtualPath 虽然是必需的,但仅在 PhysicalPath 不存在时才使用。事实上,我在 MvcBuildViews 目标中使用此指令验证了 PhysicalPath 不存在:

<Message Text="WebProjectOutputDir=$(WebProjectOutputDir)" />

果然,WebProjectOutputDir 是空白的。这就是来自 ASPNETCOMPILER 的误导性“/temp 不是有效的 IIS 应用程序”或“无法映射路径 /temp”错误消息的根源。

  1. 问题是您的构建服务器没有正确的构建目标来创建 Web 部署包。如果您查看输出,您可以看到这一点 - 您会看到它在构建后立即停止,没有针对 web 部署包任务的输出(或错误消息)。此处已对此进行了描述:
https://stackoverflow.com/questions/6409549/web-deploy-packaging-not-working-on-my-build-server

这里:

https://stackoverflow.com/questions/2607428/msbuild-target-package-not-found/6413635#6413635

出于所有原因,我发现唯一始终有效的解决方案是复制

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VisualStudio\v16.0\Web

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Microsoft\VisualStudio\v16.0\WebApplications

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0

在构建服务器上(是的,我使用的是 MSBuild 16,如图)。

也有人建议添加nuget包

MSBuild.Microsoft.VisualStudio.Web.targets

解决问题。确实如此,但是对于大型系统中的每个 Web 项目来说,这是一件相当困难的事情。

当然,您不应该这样做,但至少您,构建服务器管理员,可以为每个人修复它。我认为这只是一个错误,或者充其量是沟通不畅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多