Для начала вам не нужно большинство кавычек, особенно если используемые вами пути не содержат пробелов, но я бы сократил их до этого, учитывая пробелы в путях за $ (WebRoot ), $ (DbRoot) и $ (MSBuildProjectDirectory):
<PropertyGroup>
<WebRoot>$(DropLocation)\Latest\x86\Release\_PublishedWebsites\Web</WebRoot>
<DBRoot>$(DropLocation)\Latest\x86\Release\Database</DBRoot>
</PropertyGroup>
<PropertyGroup>
<MsbuildExe>{still-needs-a-path-to}\msbuild</MsbuildExe>
<Configuration>/p:Configuration:Release</Configuration>
<DefineConstants>/p:DefineConstants:"WebRoot=$(WebRoot);DBRoot=$(DBRoot)"</DefineConstants>
<WixSolution>"$(MSBuildProjectDirectory)\Setup\Setup.sln"</WixSolution>
</PropertyGroup>
<Message
Text="Bulding setup solution"
/>
<Message
Text="$(MsbuildExe) $(Configuration) $(DefineConstants) $(WixSolution)"
/>
<Exec
Command="$(MsbuildExe) $(Configuration) $(DefineConstants) $(WixSolution)"
/>
Однако вы все равно не сможете выполнить MSBuild с этим, поскольку путь к MSBuild не указан. Обычно он находится в папке $ (WINDIR) \ Framework \ Microsoft.Net \ v4.0.30319. Есть несколько способов получить это: либо напрямую кодировать, либо использовать переменную окружения (которую нужно каким-то образом настроить), использовать предопределенный $ (MSBuildBinPath) или извлечь его из реестра, используя синтаксис реестра MSBuild, который будет выглядеть так:
$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath)
Однако неясно, почему вы используете MSBuild, используя Exec, а не просто задачу MSBuild. Измените строку с Exec на это:
<MSBuild
Project="$(WixSolution)"
Properties="$(DefineConstants)"
/>
удаление вашей декларации для и изменение на это:
<DefineConstants>Configuration=$(Configuration);WebRoot=$(WebRoot);DBRoot=$(DBRoot)</DefineConstants>