Я использую 1.8.5 CruiseControl.Net и настраиваю наши сценарии сборки для использования в системах x86 и x64. В этом сценарии я определяю значение пути для файла msbuild.exe следующим образом:
<cb:define MSBUILD_PATH="$(PROGRAMFILESFOLDER)\MSBuild\$(VS_MSBUILD_VERSION)\Bin"/>
Когда я использую приложение CCValidator.exe для оценки моей конфигурации, значения пути являются правильными:
<tasks>
<msbuild>
<buildArgs>/p:Configuration=Release /v:quiet</buildArgs>
<description>Clean Developer Updater</description>
<dynamicValues />
<environment />
<executable>C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe</executable>
<logger>"C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll"</logger>
<loggerParameters />
<priority>Normal</priority>
<projectFile>c:\Build\AmazingCharts\working\building\DeveloperUpdater\DeveloperUpdater.sln</projectFile>
<targets>Clean</targets>
<timeout>200</timeout>
<workingDirectory>c:\Build\AmazingCharts\working\building\DeveloperUpdater</workingDirectory>
</msbuild>
</tasks>
Когда я запускаю свой проект и эта задача выполняется, он использует 64-битный каталог Program Files, и задача и проект не выполняются, потому что файл не найден.
System.IO.IOException: Unable to execute file [C:\Program Files\MSBuild\14.0\Bin\msbuild.exe].
The file may not exist or may not be executable. (The system cannot find the file specified) --->
System.ComponentModel.Win32Exception: The system cannot find the file specified`
Ниже приведен код для определения значения для PROGRAMFILES, и я подозреваю, что проблема в этом разделе.
<cb:define BUILD_PLATFORM="${ProgramFiles(x86)}"/>
<cb:if expr="'$(BUILD_PLATFORM)'!=''">
<cb:define CURRENT_ENVIRONMENT="x86"/>
<cb:define PROGRAMFILESFOLDER="$(ProgramFiles)"/>
<cb:define NETFRAMEWORK="$(WINDOWS_DIR)\Microsoft.NET\Framework\$(FRAMEWORK_VERSION)"/>
</cb:if>
<cb:else>
<cb:define CURRENT_ENVIRONMENT="x64"/>
<cb:define PROGRAMFILESFOLDER="${ProgramFiles(x86)}"/>
<cb:define PROGRAMFILESX64FOLDER="$(ProgramFiles)"/>
<cb:define NETFRAMEWORK="$(WINDOWS_DIR)\Microsoft.NET\Framework64\$(FRAMEWORK_VERSION)"/>
</cb:else>
Я проверил значение среды для ProgramFiles (x86), и оно возвращает правильное значение. Кто-нибудь может увидеть, что мне не хватает? Спасибо.
РЕДАКТИРОВАТЬ: Я заметил несколько вещей:
<cb:define BUILD_PLATFORM=" ...>
синтаксис неправильный. Это должно быть <cb:define BUILD_PLATFORM="$(ProgramFiles(x86))"
. Когда я делаю это изменение, проверка не проходит, и я не могу запустить службу ccnet. Ошибка: Preprocessing failed loading the XML: Reference to unknown symbol 'programfiles (x86'.
Я попытался изменить синтаксис, чтобы использовать значения XML и HTML, а также открывать и закрывать скобки.