Как я могу включить DLL из другого проекта в другой проект с помощью TeamCity - PullRequest
2 голосов
/ 19 декабря 2011

У нас есть пара проектов, которые зависят друг от друга. Так, например, у нас есть панель проекта, которая опирается на проект foo. Проект foo - это SDK (базовая библиотека), который мы хотим включить во все остальные проекты, потому что мы обнаруживаем, что решаем одни и те же проблемы снова и снова.

В настоящий момент проект foo и bar создаются независимо, а проект bar имеет ссылку на foo.dll и хранится в папке bar \ lib в SVN. Поэтому, если мы внесем какие-либо изменения в проект foo, мы должны взять последнюю сборку, проверить проект bar, скопировать новые DLL и снова зафиксировать. Это немного руководство и раздражает. Тем более, что у нас сейчас около 3 или 4 проектов, использующих библиотеки foo.

Я не хочу совать ВСЕ в одно решение, потому что это кажется немного глупым. Проект foo не должен так часто меняться и предоставляет SDK. Они не связаны друг с другом. Мы уже держим связанные проекты вместе в решениях. У нас уже есть несколько решений с 4-5 проектами с их тестовыми проектами. Объединение всего вместе создаст решение с 40-50 проектами, и это похоже на кошмар.

Чего я хотел бы добиться с помощью TeamCity, так это того, что если в Foo вносятся какие-либо изменения, он автоматически запускает новую сборку панели, используя обновленные библиотеки DLL Foo. Таким образом, если кто-то вносит решающее изменение, мы сразу же обнаруживаем. Затем виновник должен либо исправить свою ошибку, либо внести необходимые изменения во все зависимые проекты.

Что мы сделали до сих пор, так это то, что большинство наших решений уже созданы в TeamCity, выполняются модульные тесты и создаются артефакты. Я попытался настроить зависимость артефакта в конфигурации сборки бара в сборке foo. Это должно скопировать foo \ build \ release \ foo.dll в bar \ lib \ foo.dll. Мы получаем ошибки в настоящее время, заявляя

Failed to resolve artifact dependency xxx ... java.io.FileNotFoundException ... Access Denied

Как лучше всего делать то, что мы пытаемся? Мы идем по правильному пути? Если мы делаем это правильно, как мы решаем эту ошибку?

1 Ответ

3 голосов
/ 20 декабря 2011

Вы можете использовать внешние SVN для совместного использования сборок между проектами из центрального места.

В конце сборки мы всегда помечаем выходные данные в SVN, а также заменяем содержимое последней * 1004.* папка с последним выводом сборки, например

_output\v1.2.3\

_output\v1.2.4\

_output\latest\

Так что latest будет содержать то же самое, что и папка v1.2.4.Таким образом, в процессе разработки у нас всегда есть зависимости нашего проекта, нацеленные на последнюю папку, поэтому, когда проект извлекается, он всегда загружает последние успешно собранные сборки.

Таким образом, мы можем объединить конфигурации в TeamCity так, чтобына вашем примере, когда FOO успешно построен, BAR создается сразу после;и поскольку он извлекает сборку FOO из последней папки, проект BAR создается с последними изменениями.

Это то, что делает его непрерывной интеграцией, а не просто процессом сборки.

Извинения залюбые опечатки.Я нахожусь в крошечном лагере на моем нетбуке;ключи крошечные и не так много места для локтя!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...