msbuild icon indicating copy to clipboard operation
msbuild copied to clipboard

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

Open JaynieBai opened this issue 1 year ago • 1 comments

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

JaynieBai avatar May 13 '24 10:05 JaynieBai

@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.

AR-May avatar May 14 '24 14:05 AR-May

When run with dotnet, the CommandLine is D:\WORK\msbuild\artifacts\bin\bootstrap\core\sdk\9.0.100-rc.1.24452.12\MSBuild.dll .\MyApp.csproj /p:F1=, Image

When run with msbuild.exe, the CommandLine is D:\WORK\msbuild\artifacts\bin\bootstrap\net472\MSBuild\Current\Bin\MSBuild.exe .\MyApp.csproj /p:F1=","

Image

So for dotnet build, we have to execute dotnet D:\WORK\msbuild\artifacts\bin\bootstrap\core\sdk\9.0.100-rc.1.24452.12\MSBuild.dll .\MyApp.csproj /p:F1=\",\" with escape character "

JaynieBai avatar Nov 06 '24 03:11 JaynieBai

@rainersigwald This seems duplicate with https://github.com/dotnet/msbuild/issues/471#issuecomment-183053180.

JaynieBai avatar Nov 07 '24 10:11 JaynieBai