使用setup-dotnet@v4时dotnet publish报MSB1008错误的原因
问题:切换setup-dotnet至v4后dotnet publish报MSB1008错误
项目工作流使用setup-dotnet@v1时构建与发布均正常;切换至setup-dotnet@v4后,dotnet publish命令出现MSB1008错误(提示仅能指定一个项目),切回v1则恢复正常。
报错详情
Run dotnet publish ./Project/Project.csproj -c Release -o C:\Program Files\dotnet/myapp/ MSBUILD : error MSB1008: Only one project can be specified. Full command line: 'C:\Program Files\dotnet\sdk\8.0.302\MSBuild.dll -maxcpucount -verbosity:m -nologo -restore -target:Publish --property:_IsPublishing=true -property:PublishDir=C:\Program -property:_CommandLineDefinedOutputPath=true -property:Configuration=Release -property:DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE=true ./Project/Project.csproj Files\dotnet/myapp/ -distributedlogger:Microsoft.DotNet.Tools.MSBuild.MSBuildLogger,C:\Program Files\dotnet\sdk\8.0.302\dotnet.dll*Microsoft.DotNet.Tools.MSBuild.MSBuildForwardingLogger,C:\Program Files\dotnet\sdk\8.0.302\dotnet.dll' Switches appended by response files: Switch: Files\dotnet/myapp/ For switch syntax, type "MSBuild -help" Error: Process completed with exit code 1.
相关工作流片段
- name: Set up .NET Core uses: actions/setup-dotnet@v4 with: dotnet-version: '8.x' - name: Build with dotnet run: dotnet build ./Project/Project.csproj --configuration Release - name: dotnet publish run: dotnet publish ./Project/Project.csproj -c Release -o ${{env.DOTNET_ROOT}}/myapp/
错误原因及解决方法
原因
- setup-dotnet@v4中,
DOTNET_ROOT环境变量的值为C:\Program Files\dotnet,路径包含空格。 - 执行
dotnet publish命令时,未对带空格的输出路径加引号,导致命令被解析为-o C:\Program Files\dotnet/myapp/,MSBuild将空格后的Files\dotnet/myapp/误认为是第二个项目参数,触发"仅能指定一个项目"的MSB1008错误。 - setup-dotnet@v1中
DOTNET_ROOT可能指向无空格路径,或旧版dotnet CLI对参数空格处理更宽松,因此未出现问题。
解决方法
- 给输出路径添加双引号包裹,避免空格拆分参数:
- name: dotnet publish run: dotnet publish ./Project/Project.csproj -c Release -o "${{env.DOTNET_ROOT}}/myapp/" - 或者改用无空格的输出目录,比如:
- name: dotnet publish run: dotnet publish ./Project/Project.csproj -c Release -o ./publish/
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

