From def4ce245230bb9c71eb5832e7750d3f6eff6759 Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Wed, 7 Dec 2022 13:25:01 -0500 Subject: [PATCH] dotnet.py: `--output` is no longer supported with `dotnet build/publish` (#2774) .. with .sln files. Instead, pass `/p:PublishDir=..` to the build command. This changed in https://github.com/dotnet/sdk/pull/29065, and broke `dotnet-runtime-perf` pipeline's blazor scenarios. ``` $ dotnet publish /home/helixbot/work/A8850905/p/performance/src/scenarios/blazorpizza/app/BlazingPizza.sln --configuration Release --output pub /p:NuGetPackageRoot=/home/helixbot/work/A8850905/w/A9A608EA/u/artifacts/packages/ /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 --framework net7.0 /p:_TrimmerDumpDependencies=true -bl:./traces/blazor_publish.binlog -p:WasmNativeWorkload=false MSBuild version 17.5.0-preview-22601-03+a2490dd3f for .NET /home/helixbot/work/A8850905/p/dotnet/sdk/8.0.100-alpha.1.22606.3/Current/SolutionFile/ImportAfter/Microsoft.NET.Sdk.Solution.targets(36,5): error NETSDK1194: The "--output" option isn't supported when building a solution. [/home/helixbot/work/A8850905/p/performance/src/scenarios/blazorpizza/app/BlazingPizza.sln] ``` Details: When building a solution, passing a relative path to `PublishDir` gets evaluated per-project. So, if we pass `-p:PublishDir=pub` then we get `pub/` sub-directories for each of the projects. But when used with `--output pub`, output for all the projects goes to the same directory. To have the same behavior use an absolute path. --- scripts/dotnet.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/dotnet.py b/scripts/dotnet.py index 77010e0e5c..0411dc2ca5 100755 --- a/scripts/dotnet.py +++ b/scripts/dotnet.py @@ -338,7 +338,7 @@ def build(self, ] if output_to_bindir: - cmdline = cmdline + ['--output', self.__bin_directory] + cmdline += self.__get_output_build_arg(self.__bin_directory) if runtime_identifier: cmdline = cmdline + ['--runtime', runtime_identifier] @@ -362,7 +362,7 @@ def build(self, ] if output_to_bindir: - cmdline = cmdline + ['--output', self.__bin_directory] + cmdline += self.__get_output_build_arg(self.__bin_directory) if runtime_identifier: cmdline = cmdline + ['--runtime', runtime_identifier] @@ -436,10 +436,10 @@ def publish(self, 'dotnet', 'publish', self.csproj_file, '--configuration', configuration, - '--output', output_dir, "/p:NuGetPackageRoot={}".format(packages_path), '/p:UseSharedCompilation=false', '/p:BuildInParallel=false', '/m:1' ] + cmdline += self.__get_output_build_arg(output_dir) if runtime_identifier: cmdline += ['--runtime', runtime_identifier] @@ -456,6 +456,14 @@ def publish(self, self.working_directory ) + def __get_output_build_arg(self, outdir) -> list: + # dotnet build/publish does not support `--output` with sln files + if path.splitext(self.csproj_file)[1] == '.sln': + outdir = outdir if path.isabs(outdir) else path.abspath(outdir) + return ['/p:PublishDir=' + outdir] + else: + return ['--output', outdir] + @staticmethod def __print_complus_environment() -> None: getLogger().info('-' * 50)