Я нашел метод ниже в другой проблеме StackOverflow. Он получает правильное имя каталога «Program Files», независимо от того, работает ли файл в 32- или 64-разрядной версии Windows.
Как я могу обойти проблему ниже. Если я не ставлю двойные кавычки вокруг% programfiles%, я получаю ошибку на множестве.
set BTDFProgFiles=%programfiles(x86)%
if %BTDFProgFiles%=="" set BTDFProgFiles=%programfiles%
echo BTDFProgFiles=%BTDFProgFiles%
%BTDFMSBuildPath% "%BTDFProgFiles%\FRB.EC.Common\%2\Deployment\FRB.EC.Common.BizTalk.Deployment.btdfproj" etc...
Если я поставлю туда двойные кавычки, операторы SET будут работать, но тогда параметр для программы сборки будет показан с двумя параметрами:
set BTDFProgFiles="%programfiles(x86)%"
if %BTDFProgFiles%=="" set BTDFProgFiles="%programfiles%"
echo BTDFProgFiles=%BTDFProgFiles%
%BTDFMSBuildPath% "%BTDFProgFiles%\FRB.EC.Common\%2\Deployment\FRB.EC.Common.BizTalk.Deployment.btdfproj" etc...
Интерпретируется как:
«C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBu
ild.exe "" C: \ Program Files "\ FRB.EC.BookTransfer \ 1.1 \ Deployment \ FRB.EC.BookTransf
er.BizTalk.Deployment.btdfproj "и т.д ...
MSBuild считает, что я пытаюсь пропустить более одного проекта .;
MSBUILD: ошибка MSB1008: можно указать только один проект.