ProvideCommandLineArgs is a switch on the Csc/Vbc build tasks which lets the task produce as an output the arguments that will be passed to Csc. It doesn't quite work right however in .NET Core: since the tool task in that case doesn't invoke csc.exe but instead tries to invoke "dotnet.exe exec csc.dll"..., the "exec" and "csc.dll" also appear in the ProvideCommandLineArgs. This throws off project systems since we then take the command line args and pass them to the command like parser, so logically you have a source file named "exec"... 😄
Steps to Reproduce:
- Create a new dotnet console app project.
- Add
<ProvideCommandLineArgs>true</ProvideCommandLineArgs>
dotnet build -bl
- Look at the output items of the Csc task:

In this case, we'd expect the CscCommandLineArgs are just the parts going to csc, excluding the parts going to dotnet.