尝试在构建时构建ASP MVC视图时出错

时间:2017-02-23 07:23:11

标签: asp.net-mvc vb.net visual-studio asp.net-mvc-4 iis-express

我有一个ASP MVC 4项目。它起始于MVC 1,因此它使用旧式ASPX / ASCX视图。我希望在构建时编译视图,主要是为了获得编译时错误检查(而且,重要的是,要在Visual Studio中直接显示错误)。我正在使用IIS Express作为调试服务器在Visual Studio Pro 2015中进行开发。

根据msdnHaacked 以及this这样的问题,我设置了以下我的.vbproj:

<MvcBuildViews>true</MvcBuildViews>

并且我的.vbproj也创建了一个任务

<Target Name="BuildViews" Condition="'$(MvcBuildViews)'=='true'" AfterTargets="Build">
  <Message Importance="normal" Text="Precompiling views" />
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

但是,在尝试构建时,这会给我一个错误:

  

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

作为文件,它只引用 ASPNETCOMPILER

我已经尝试了各种替代方案 VirtualPath - 我将项目配置为在dev中作为子目录 / local 运行所以我试过了,并且该站点来自.vs文件夹中配置的名称,没有任何作用。

我应该更改 VirtualPath (如果是这样的话)或者 temp 还缺少其他配置吗?

修改

此外,运行命令行MSBuild时出现同样的错误。对于我的实际生产系统,我有一个脚本,它使用命令行MSBuild进行构建,然后将构建的包移动到产品服务器并进行部署。因此,在构建时不会有IIS express(或IIS运行)。您是否需要连接Web服务器才能编译视图?

修改2

我对这里对virtulPath的需求以及与Web服务器的明显连接感到困惑。一些建议的解决方案涉及配置IIS。 IIS Express(我用于调试)甚至不一定在成功构建之后运行,因为我理解它?无论如何,我的应用程序非常愉快地运行在虚拟目录中( / local 在调试模式下)但是使用它作为值不起作用。如果重要,这是我项目中.vs文件夹中applicationhost.config的相关部分(我尝试将相同的路径放入Documents / IIS Express中的applciationhost.config):

 <site name="CarWeb-Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\adam.conway\Documents\My Web Sites\CarWeb-Site" />
    </application>
    <application path="/local" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="filesystem path to my project" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:57047:localhost" />
        <binding protocol="http" bindingInformation="*:57047:*" />
    </bindings>
</site>

所以我真的不明白为什么只有VirtualPath="/"不起作用,因为那是那些配置中引用的虚拟路径。

虽然我的主要目的是在Visual Studio中显示视图错误(我会接受一个仅限于此的答案),但我也是在一台机器上使用MSBuild构建生产环境的情况,该机器甚至不一定有IIS安装。

2 个答案:

答案 0 :(得分:3)

AspNetCompiler调用aspnet_compiler.exe(https://msdn.microsoft.com/en-us/library/ms229863.aspx?f=255&MSPPError=-2147217396)。在Visual Studio错误列表中,对此exe的调用显示为ASPNETCOMPILER。

我建议你启用 诊断级别日志记录https://msdn.microsoft.com/en-us/library/jj651643.aspx,然后搜索构建日志中的aspnet_compiler.exe字符串并检查调用aspnet_compiler.exe时正在使用的参数(特别是路径)。你也可以从log&amp; amp;在cmd.exe中手动调用aspnet_compiler.exe。

最可能的问题是在PhysicalPath属性中,而不是在VirtualPath中,似乎VirtualPath属性不会影响构建。检查这些答案:

如果您需要MSBuild和Visual Studio的单独路径,则可以使用此技术http://web4.codeproject.com/Articles/156989/Resolve-temp-global-asax-error-ASPPARSE-Could?display=Print

答案 1 :(得分:2)

基于@snautz答案,我实际使用的对我有用的行是

<AspNetCompiler VirtualPath="/" PhysicalPath="$(ProjectDir)" />

许多在线示例使用$(ProjectDir)\..\$(ProjectName)作为PhysicalPath,但我不确定原因,因为这只是解析为$(ProjectDir) ...