Visual Studio 2017正常Web项目TeamCity构建报错:ASPNETCOMPILER路径映射失败
我之前也碰到过几乎一模一样的情况——本地VS2017里构建运行都没问题,一到TeamCity上执行构建就弹出这个ASPNETCOMPILER错误。折腾了好一阵,总结出几个靠谱的解决方向,你可以挨个试试:
检查TeamCity构建服务的账户权限
TeamCity的构建服务默认可能用系统账户运行,也可能是你指定的专用账户。这个账户必须拥有/temp对应的物理文件夹的读写权限。举个例子,如果你的项目里/temp映射到服务器的C:\inetpub\wwwroot\YourProject\temp,那你得找到TeamCity服务的运行账户(打开服务管理器,找到TeamCity相关服务,看「登录」标签),然后给这个文件夹添加该账户的修改、写入权限。替换代码里的虚拟路径映射方式
本地VS运行时是在IIS上下文里,Server.MapPath("/temp")能正常解析,但TeamCity构建时没有IIS环境,这个方法就会失效。你可以改成用物理路径或者配置项来获取路径:- 在
web.config里添加配置:<appSettings> <add key="TempFolderPath" value="D:\Builds\YourProject\temp" /> </appSettings> - 代码里换成读取配置:
var tempPath = ConfigurationManager.AppSettings["TempFolderPath"];
这样构建时就不需要依赖IIS的虚拟路径映射了。
- 在
调整TeamCity的MSBuild构建参数
在TeamCity的构建配置里,给MSBuild添加额外参数,帮助它正确解析路径:- 可以指定网站的输出目录和虚拟路径:
/p:WebProjectOutputDir=D:\Builds\YourProject\Output /p:VirtualPath=/ - 也可以启用Web发布管道的参数,让构建流程更贴近VS的发布逻辑:
/p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false
这些参数能帮ASP.NET编译器在构建时找到正确的路径。
- 可以指定网站的输出目录和虚拟路径:
检查TeamCity构建工作目录的权限
TeamCity会在构建代理的工作目录(比如C:\TeamCity\buildAgent\work\随机字符串)里生成临时文件,如果构建账户没有这个目录的读写权限,也可能触发路径映射错误。去这个目录的安全选项卡,给构建账户加上必要的权限就行。
如果还是没解决,建议在TeamCity里开启详细构建日志,看MSBuild的完整输出,里面可能会有更具体的路径提示,帮你定位到底是哪个文件夹出了问题。
内容的提问来源于stack exchange,提问作者qqus

