Why can't I use MSBuild macros in a C# Project's properties? These all work find in a CPP project.
This is because the way C# and CPP project introduce macros is not the same.
For C# project, it introduced by the .props, .targets files, for example, the Microsoft.CSharp.targets file. In your project file .csproj you will find following Import:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
For CPP project, it introduced by property sheets, you can get it from View->Other Windows->Property Manager, which is not supported by C# project.
The different:
You can use property sheets to create project configurations that can
be applied to multiple projects since project settings that are
defined in .vsprops files are inheritable, unlike project settings
defined in Project Files (.vcproj files). Therefore, a project
configuration defined in a .vcproj file can inherit project settings
from one or more property sheets (.vsprops files). For more
information, see Property Inheritance.
That the reason why you can use MSBuild macros in a CPP Project's properties but not in C# project.
You can check following document for some more details:
Common macros for build commands and properties
Property Sheets (C++)
Hope this helps.