dotnet / msbuild

The Microsoft Build Engine (MSBuild) is the build platform for .NET and Visual Studio.
https://docs.microsoft.com/visualstudio/msbuild/msbuild
MIT License
5.16k stars 1.34k forks source link

[Bug]: Escape , and ;= doesn't work for global property when build with dotnet, but html encode %3C and %3B= works well #10128

Open JaynieBai opened 1 month ago

JaynieBai commented 1 month ago

Issue Description

  1. Test escape ',' and "," and %3C in the powershell , cmd, bash and zsh. Found "," and ',' is not supported in the following 4 shells and cmd error is different from others.

  2. Test ";=" and ';=' and %3B in 4 shells. Found when ";=" and ';=' global property, it reports error in 4 shells with the same error MSB1006: Property is not valid. But = and ; work well separately for global property

Powershell

With quotes: MSBUILD : error MSB1005: Specify a property and its value.

With double quotes: MSBUILD : error MSB1005: Specify a property and its value.

Html Codes. Works well

image

CMD

With quotes: MSBUILD : error MSB1006: Property is not valid.

With double quotes: MSBUILD : error MSB1005: Specify a property and its value.

With html codes: Good image

bash

With quotes: MSBUILD : error MSB1005: Specify a property and its value.

With double quotes: MSBUILD : error MSB1005: Specify a property and its value.

Html codes: works well

image

ZSH

With quotes: MSBUILD : error MSB1005: Specify a property and its value.

With double quotes: MSBUILD : error MSB1005: Specify a property and its value.

Html codes work well image

Steps to Reproduce

custom-proj1.zip dotnet version 9.0.100-preview.3.24204.13

  1. dotnet build custom-proj1.csproj /t:Init /p:F1=","
  2. dotnet build custom-proj1.csproj /t:Init /p:F1=";="

Expected Behavior

dotnet build should support such properties "," and ";=" as msbuild.exe

Actual Behavior

Dotnet build doesn't support the global property ", " and ";="

Analysis

No response

Versions & Configurations

No response

AR-May commented 1 month ago

@JaynieBai could you please check whether it is shell or msbuild parsing causing this error? For that, please check which parameters msbuild received. You can set $env:MSBUILDDEBUGONSTART=1, run the build, start debugging and look the parameters that msbuild received in the code.