Как изменить источник с помощью NAnt? - PullRequest
7 голосов
/ 28 января 2009

Я бы хотел изменить строку в файле .h с помощью NAnt, прежде чем строить решение.

В файле .h есть макрос: #define SERVER_ADDRESS "www.customserver.net", и я хотел бы изменить строку перед развертыванием программного обеспечения, чтобы каждая сборка могла быть сделана для собственного адреса путем передачи адреса в командной строке.

Кто-нибудь знает, как это можно сделать?

Спасибо!

Ответы [ 2 ]

14 голосов
/ 28 января 2009

Можно использовать задачу loadfile , чтобы помочь с этим. Эта задача загружает данный файл в свойство. Что действительно полезно, так это когда вы применяете filterchain с replacetokens для замены определенных областей файла. Например, если нужно определить шаблонный заголовочный файл , который будет выглядеть примерно так:

#ifndef MyMacros_h
#define MyMacros_h

#define SERVER_ADDRESS "@SERVER_ADDRESS_TOKEN@"

#endif

Можно использовать задачу loadfile, чтобы заменить @ SERVER_ADDRESS_TOKEN @ любой строкой, а затем использовать задачу echo , чтобы фактически вывести файл real header обратно. *

<loadfile file="MyMacrosTemplate.h" property="theMacrosFileContents">
    <filterchain>
        <replacetokens>
            <token key="SERVER_ADDRESS_TOKEN" value="www.customerserver.net" />
        </replacetokens>
    </filterchain>
</loadfile>
<echo file="MyMacros.h" message="${theMacrosFileContents}" />

При этом будет создан файл MyMacros.h с измененной строкой для SERVER_ADDRESS.

0 голосов
/ 28 января 2009

Я не думаю, что это правильный способ использовать NAnt. Я не хотел бы изменять содержимое файла таким образом. Я не верю, что это возможно.

Возможно, вы можете иметь разные файлы для каждого случая и указать путь к нему в зависимости от входного параметра.

Лично я думаю, что подобные строки не должны быть жестко запрограммированы в приложении. Если они собираются измениться, лучше перенести их в файлы конфигурации или свойств, которые читаются при запуске. Таким образом, вы можете изменить их без необходимости изменения исходного кода или перекомпиляции.

...