我有一个带有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"
对我可能在这里想念的东西有何想法?
答案 0 :(得分:0)
发生此问题是因为AspNetCompiler在bin
文件夹中寻找类型。在这种情况下,对我来说解决方案很简单(虽然没有到达那里)。只需在预编译之前构建应用程序即可。这意味着预编译所寻找的dll
将就位。
我仍然有一些未解决的问题,例如为什么在没有dll
和bin
文件夹的情况下,预编译在本地对我有用。同样,当我在构建服务器上以服务用户的身份手动调用命令时,我仍然不知道为什么在没有dll
和bin
文件夹的情况下进行预编译的情况。
但是,通过TeamCity构建步骤调用预编译时,预编译之前的构建似乎可以解决问题。