基于ServiceStack.Razor的AppHarbor预编译网站失败

时间:2013-01-05 10:58:57

标签: .net razor servicestack appharbor

我正在尝试将基于ServiceStack.Razor的当前非常简单的Web应用程序部署到AppHarbor,但它在asp.net预编译步骤中失败了:

Microsoft (R) ASP.NET Compilation Tool version 4.0.30319.17929
Utility to precompile an ASP.NET application
Copyright (C) Microsoft Corporation. All rights reserved.

d:\temp\ueggj0qu.hf5\temp\root\61980531\2c38de0c\App_Web_431dglyw.0.cs(15): error CS0146: Circular base class dependency involving 'RazorOutput.ViewPage' and 'RazorOutput.ViewPage'

[HttpCompileException]: d:\temp\ueggj0qu.hf5\temp\root\61980531\2c38de0c\App_Web_431dglyw.0.cs(15): error CS0146: Circular base class dependency involving 'RazorOutput.ViewPage' and 'RazorOutput.ViewPage'
   at System.Web.Compilation.AssemblyBuilder.Compile()
   at System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder(AssemblyBuilder builder)
   at System.Web.Compilation.WebDirectoryBatchCompiler.<CompileNonDependentBuildProviders>b__0(AssemblyBuilder assemblyBuilder)
   at System.Web.Compilation.CompilationUtil.CompileParallel(ICollection assemblyBuilders, Action`1 action)
   at System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(ICollection buildProviders)
   at System.Web.Compilation.WebDirectoryBatchCompiler.Process()
   at System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(VirtualDirectory vdir, Boolean ignoreErrors)
   at System.Web.Compilation.BuildManager.BatchCompileWebDirectory(VirtualDirectory vdir, VirtualPath virtualDir, Boolean ignoreErrors)
   at System.Web.Compilation.BuildManager.PrecompileWebDirectoriesRecursive(VirtualDirectory vdir, Boolean topLevel)
   at System.Web.Compilation.BuildManager.PrecompileWebDirectoriesRecursive(VirtualDirectory vdir, Boolean topLevel)
   at System.Web.Compilation.BuildManager.PrecompileAppInternal(VirtualPath startingVirtualDir, IEnumerable`1 excludedVirtualPaths)
   at System.Web.Compilation.BuildManager.PrecompileApp(VirtualPath startingVirtualDir, IEnumerable`1 excludedVirtualPaths)
   at System.Web.Compilation.BuildManager.PrecompileApp(ClientBuildManagerCallback callback, IEnumerable`1 excludedVirtualPaths)
   at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback callback, List`1 excludedVirtualPaths)
   at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback callback, List`1 excludedVirtualPaths)
   at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManagerCallback callback, Boolean forceCleanBuild)
   at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManagerCallback callback)
   at System.Web.Compilation.Precompiler.Main(String[] args)

我知道我可以关闭预编译,但在我为项目添加更多复杂性之前,我宁愿深入研究这个问题。

该项目目前包含非常基本的版本:

  • 查看/ _Layout.cshtml
  • 查看/ SomeServiceResponseView.cshtml
  • 内容/ SomeStaticView.cshtml

静态视图不是100%静态的(它仍然是Razor生成的视图),它不是基于服务DTO模型。

_Layout和StaticView都来自ViewPage(例如@inherits ViewPage) ServiceResponseView派生自ViewPage的通用模型版本(例如@inherits ViewPage<SomeDtoResponse>)。

我已经在本地运行了aspnet_compiler.exe工具,但只设法获得与上面相同的输出(AppHarbor FAQ建议在本地运行它以帮助调试预编译问题,但我还没有设法找到任何方法它能给我更多信息......?)。

之前有没有人看过类似的错误消息?
任何了解Razor在幕后做什么的人都能找到导致这种情况的线索的任何线索? 这是一个问题,因为ServiceStack.Razor和普通的ASP.NET MVC Razor之间存在差异,在这种情况下,关闭预编译是正确的解决方案吗?

2 个答案:

答案 0 :(得分:2)

我也必须在AppHarbor上禁用View Pre-compilation。

我很确定它不可能启用,因为ServiceStack Razor页面有自己的构建过程,而且它们也不依赖于System.Web.Mvc。

我认为AppHarbor进程需要System.Web.Mvc Razor视图。

答案 1 :(得分:0)

我在IIS Express中本地运行时遇到了同样的错误,并发现如果我将其添加到web.config中它会起作用:

<appSettings>
  <add key="webPages:Enabled" value="false" />
</appSettings>

我发现在ServiceStack的RazorRockstar样本中进行设置后,将其逐行与我自己的项目进行比较,看看为什么我的工作不起作用。

相关问题