У нас есть проект .NET, состоящий из нескольких подпроектов (около 20). Существует несколько решений, каждое из которых содержит только те подпроекты, которые относятся к конкретному решению.
Чтобы учесть произвольные решения, наши подпроекты никогда не ссылаются друг на друга посредством ссылок на проекты, а скорее посредством прямых ссылок на dll. Файл csproj немного подправлен, чтобы HintPath включал $ (Configuration), поэтому сборки Debug ссылаются на dll отладки, а сборки выпуска - на dll выпуска.
Все отлично работает, но есть две основные проблемы - одна раздражает, а другая очень острая:
- VS не распознает ссылки dll для целей расчета зависимости. Мы должны вручную указывать зависимости с помощью диалога «Project Dependencies» каждый раз, когда добавляется новый проект или ссылка. Это раздражает.
- Мы не используем ни Resharper, ни Visual Assist (отличные инструменты, но мы их не используем, это данность). Нам нравится использовать стандартную команду «Browse to Definition» (например, доступную из контекстного меню исходного кода). Острая проблема заключается в том, что он работает только между проектами, если один проект ссылается на другой, используя ссылку на проект, и не работает, когда ссылка является прямой ссылкой dll, , даже если указанный проект включен в решение ! Это настоящий облом, потому что вместо перехода к источнику он перемещается к метаданным.
Я ищу совета у тех людей, которые используют ссылки dll, такие как мы, и каким-то образом преодолели эти две проблемы.
Спасибо.
EDIT:
Обратите внимание, что, помимо проблемы «Обзор к определению», наличие Dll-ссылок вместо ссылок на проект обуславливает только одну временную стоимость для менеджера проекта, которая заключается в обновлении зависимостей проекта каждого затронутого решения при добавлении нового проекта или новая зависимость должна быть введена. Эти зависимости проекта сохраняются в файле .sln и не требуют никакого обслуживания, пока не прибудет новый проект или не будет создана новая зависимость, что случается не так часто.
Мы используем msbuild для построения наших проектов на CI-сервере, который использует те же файлы .sln, что и VS. Существует один основной файл .sln, который включает все подпроекты.
Я хотел бы подчеркнуть более острую проблему - неспособность перейти к определению в другом проекте, хотя оба проекта находятся в одном решении только потому, что ссылки являются ссылками dll. Это раздражает, и это неприятно, нет никаких причин, почему VS настаивает на ссылках на проекты, чтобы включить эту функцию. Другие инструменты, такие как Resharper или Visual Assist, не имеют этого ограничения. Увы, у нас нет этих инструментов и вряд ли будет в обозримом будущем.