/global.asax(1):错误ASPPARSE:无法加载类型

时间:2018-08-13 15:35:18

标签: c# .net powershell teamcity aspnet-compiler

我有一个带有MVC网站和API项目的.Net解决方案。该网络项目有<MvcBuildViews>true</MvcBuildViews>

还有

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler Condition="'$(IsDesktopBuild)' != 'false'" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" /> <AspNetCompiler Condition="'$(IsDesktopBuild)' == 'false'" VirtualPath="temp" PhysicalPath="$(PublishDir)\_PublishedWebsites\$(ProjectName)" /> </Target>

当我通过PowerShell在本地调用命令时,它可以进行预编译。但是,当预编译由构建服务器(TeamCity在服务用户下运行)触发时,它将失败,并显示以下错误

/MyWebsite.Web/global.asax(1): error ASPPARSE: Could not load type 'MyWebsite.Web.MvcApplication'

/MyWebsite.Api/global.asax(1): error ASPPARSE: Could not load type 'MyWebsite.Api.WebApiApplication'

我也尝试过以PowerShell自己和构建服务器上的服务用户身份通过​​PowerShell调用预编译命令,并且两次都可以正常工作。仅当通过TeamCity本身触发构建时,它才会失败。

这是我用来预编译项目的命令

aspnet_compiler -p "$path\$proj" -v $proj -fixednames -f -c -d "$precompiled_output_folder\$proj"

对我可能在这里想念的东西有何想法?

1 个答案:

答案 0 :(得分:0)

发生此问题是因为AspNetCompiler在bin文件夹中寻找类型。在这种情况下,对我来说解决方案很简单(虽然没有到达那里)。只需在预编译之前构建应用程序即可。这意味着预编译所寻找的dll将就位。

我仍然有一些未解决的问题,例如为什么在没有dllbin文件夹的情况下,预编译在本地对我有用。同样,当我在构建服务器上以服务用户的身份手动调用命令时,我仍然不知道为什么在没有dllbin文件夹的情况下进行预编译的情况。

但是,通过TeamCity构建步骤调用预编译时,预编译之前的构建似乎可以解决问题。