MSBuild обрабатывает имена свойств один раз. Чтобы сделать такую функцию, она должна вызывать предварительную обработку несколько раз. Я думаю, что было бы лучше использовать условный подход.
<PropertyGroup>
<TargetHost Condition="'$(Target-Environment)'=='Env1'">Host_1</TargetHost>
<TargetHost Condition="'$(Target-Environment)'=='Env2'">Host_2</TargetHost>
<TargetHost Condition="'$(TargetHost)'==''">DefaultHost</TargetHost>
</PropertyGroup>