为何MSBuild未创建ASP.NET WebForms项目的Release\Publish构件目录?
以下是可能导致MSBuild无法在指定路径创建Release\Publish目录的原因及解决建议:
相对路径基准错误
你的publishUrl使用的是相对路径,该路径的基准是MSBuild的工作目录(即GitHub Actions运行器执行命令时的当前目录),而非解决方案文件所在目录。如果$env:Solution_Name对应的解决方案不在工作目录根目录,相对路径就会指向错误位置。建议改用绝对路径,或者先切换到解决方案所在目录再执行MSBuild命令,比如:cd FP_Timetrack\FP_Timetrack\TimeTrackSite msbuild $env:Solution_Name /p:Configuration=Release /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=bin\Release\Publish运行器账户权限不足
自托管运行器的执行账户对目标路径没有写入权限,导致无法创建子目录和写入文件。检查运行器服务所使用的账户(比如本地系统账户或域账户)是否拥有该目录的读写权限,必要时添加权限或切换到有权限的账户运行自托管运行器。MSBuild参数不兼容旧项目
10年前的ASP.NET WebForms项目可能基于旧版.NET Framework(如.NET 2.0/3.5),部分MSBuild参数可能不兼容。建议补充指定平台参数:/p:Platform="Any CPU",同时确认DeployDefaultTarget=WebPublish是否适配旧项目,可尝试替换为/t:WebPublish直接指定目标。项目配置覆盖命令行参数
项目文件(.csproj)中可能存在自定义的发布配置,比如<PublishUrl>节点或发布配置文件(.pubxml),这些配置会覆盖命令行传入的参数。打开项目文件检查是否有硬编码的发布路径,或者尝试添加/p:PublishProfile=FileSystem明确指定发布配置。编译/发布过程静默失败
如果MSBuild在编译阶段就出现错误(比如缺少依赖、语法错误),会直接跳过发布步骤,自然不会生成目录。查看GitHub Actions的运行日志,确认MSBuild是否有报错信息,优先解决编译错误后再排查发布问题。
内容的提问来源于stack exchange,提问作者Rod

