Как уже говорили другие - использование «динамического» ключевого слова в c # 4. Вот простой пример - он гораздо более лаконичен, чем «InvokeMethod»
dynamic xl = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
dynamic books = xl.Workbooks;
dynamic book = books.Add();
Console.WriteLine(books.Count); //Writes 1
foreach (dynamic b in books)
{
Console.WriteLine(b.Name); //Writes "Book1"
}
Вы можете использовать Триггер проекта для запуска ProjectA, когда ProjectB успешно собран, например:
<project name="ProjectA">
<triggers>
<projectTrigger project="ProjectB">
<triggerStatus>Success</triggerStatus>
<innerTrigger type="intervalTrigger"
seconds="60"
buildCondition="ForceBuild" />
</projectTrigger>
</triggers>
...
</project>
Это опрашивает результат сборки для ProjectB каждые 60 секунд, и если появляется новая успешная сборка, после чего запускается ProjectA. По умолчанию он будет искать проект на том же сервере CCNET, но вы можете указать его на другом с помощью атрибута serverUri
. Вы можете добавить еще один триггер для ProjectA, если хотите, чтобы он строился при обновлении его репозитория Subversion.
Если вы запускаете сборки на одном сервере, вы можете поместить их в одну очередь, если они могут мешать друг другу. в любом случае, иначе вы могли бы заставить их обоих строить одновременно.
Я установил систему сборки из около 20 решений и, возможно, 100 проектов, использующих сценарии NAnt с CCNet в качестве механизма сборки. Для обработки зависимостей между решениями я использовал инструмент на основе Java Ivy .
Ivy использует двоичные зависимости, в которых зависимость уточняется информацией о версии. Результат компиляции хранится в двоичном репозитории, то есть в файловой системе или даже в подрывной версии. При компиляции двоичные зависимости загружаются в файловую систему.
Этот подход отлично работает для проектов, где у вас есть относительно слабосвязанные модули (представленные MS Solution), которые развиваются относительно независимо друг от друга. Для такой установки, как ваша, где у вас есть отдельный канал для каждого проекта / решения, проекты / решения действительно должны быть слабо связаны, иначе вы обнаружите, что выполняете очень много тегов и ветвлений по мере увеличения системы.
Если вам нужно иметь более тесную связь между вашими проектами, я бы рекомендовал переместить их в один ствол.
Примечание: Ivy нужно вызывать как исполняемый файл командной строки, и вы не получите хорошей интеграции с Java Ant.