[release/9.0.2xx] Use the static factory for creating a logger #45009
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes dotnet/msbuild#10998
Summary
dotnet run
directly creates an instance ofTerminalLogger
, bypassing all checks. This can lead to situations where ANSI escape sequences are emitted to the terminal, even if the terminal does not support them. These escape sequences are also emitted when the standard output is redirected, which can break a CI build that relies on the command's output.Changes Made
Added a static factory that can return instance of Terminal or Console logger based on current environment. The usage of
TerminalLogger
in this scenario can be explicitly disabled by using of already existing env. variable, which wasn't possible before.This SDK update uses this factory to pass the appropriate logger to MSBuild.
Customer Impact
Some customers reported unexpected behavior of
dotnet run
command and CI builds failures.Regression?
Yes.
Testing
Manual testing with locally updated SDK.
Notes
This PR depends on dotnet/msbuild#11016. Until the MSBuild PR is merged and inserted, this fix will not work.