Вы уже пробовали встроенную поддержку MSBuilds для чтения реестра?
<PropertyGroup>
<CrmPath>$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM@CRM_Server_InstallDir</CrmPath>
</PropertyGroup>
Изучил это сам из этого блога .
Кроме того, вы можете запустить MSBuild вx86 и x64:
%WINDIR%\Microsoft.NET\Framework\v3.5\MSBuild.exe
и
%WINDIR%\Microsoft.NET\Framework64\v3.5\MSBuild.exe
Редактировать
Даже если вы работаете в многоцелевой средеВы можете решить эту проблему с помощью встроенных средств.
<!-- MSBuild 3.5 x86 / AnyCPU -->
<PropertyGroup Condition=" '$(MSBuildToolsPath)' == '$(windir)\Microsoft.NET\Framework\v3.5' AND '$(Platform)' == 'AnyCPU' ">
<CrmPath>$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\SysWow64\*)</CrmPath>
</PropertyGroup>
<!-- MSBuild 3.5 x64 -->
<PropertyGroup Condition=" '$(MSBuildToolsPath)' == '$(windir)\Microsoft.NET\Framework64\v3.5' AND '$(PLatform)' == 'x64' ">
<CrmPath>$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\*)</CrmPath>
</PropertyGroup>
MSBuild обычно может определить, с какой средой он имеет дело, поэтому вы можете обрабатывать все возможные комбинации и использовать один и тот же сценарий на всех типах машин.