Каков наилучший способ обработки ссылок в приложении .NET

9

Недавно на работе мы столкнулись с проблемой, когда мы пометили / разветвили проект и столкнулись с некоторыми проблемами компиляции из-за ссылок на dll / project, которые указывали на старую структуру папок.

Мы создали папку «external bin» для каждого из проектов и скопировали упомянутые dll в эти папки. Это лучший способ или есть определенный отраслевой стандарт для этого?

Андре Ломбард
источник

Ответы:

21

Я бы сказал, что nuget - лучший способ справиться с зависимостями.

Nuget может управлять версиями и автоматически загружать зависимости с вашего локального сервера Nuget.

Это довольно легко создать / настроить локальный сервер. Просто создайте новый пустой проект ASP.NET и установите nuget-serverпакет nuget (используя nuget;).

Это также означает, что вам не нужно проверять все зависимости и / или управлять их версиями с помощью TFS.

jgauffin
источник
1
Я считаю, что большинство компаний не могут использовать это хорошо. На самом деле, мне еще предстоит увидеть сервер сборки, правильно настроенный для получения преимуществ, поэтому +1 за то, что я хотел бы видеть повсюду.
Deltree
Я планировал задать вопрос, не удалось ли написать сценарий nuget (или что-то в этом роде), чтобы неверсировать пакеты и автоматически загружать зависимости… И первый результат поиска говорит мне, что nuget поддерживает это из коробки! Спасибо!
Mormegil
5

На самом деле это не так - Microsoft говорит, что лучший способ справиться со ссылками - построить ваш проект в одном огромном решении. Да, я знаю, они действительно имеют в виду это тоже.

Команда по шаблонам и практикам объединила свои лучшие практики в отношении TFS, но это применимо к общим сборкам. Существует 3 типа установки решения: «1 большое решение», многораздельный подход, который во многом похож на то, как большинство людей использовали для управления сборками, собирая по очереди и копируя артефакты в общий каталог (который не помог .NET не наличие общесерверного пути «include» или «library» к ссылке) и настройка Multiple Solution, которая является более сложной версией Partitioned.

Они говорят

In general you should:

    Use a single solution strategy unless the resulting solution is too large to load into Visual Studio.
    Use multiple solutions to create specific views on sub-systems of your application.
    Use multiple solutions to reduce the time it takes to load a solution and to reduce build time for developers.

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

У меня были проблемы со сборками .NET, которые пытаются урезать систему, создавая только то, что нужно, ночная сборка, которая делает все и копирует каждую новую сборку в каталог, была лучшим способом для всех синхронизироваться - особенно для тестировщиков. Обратите внимание, что это действительно относится только к приложениям .NET, приложения C ++, как правило, все еще работают, потому что у них нет сборок с версиями или подобных аспектов, которые могут вызвать проблемы с вызовом компонентов. Этот подход работает хорошо, но вы не всегда можете предположить, что частичные сборки в порядке, все это сводится к нулю, и перестройка является наиболее безопасной.

gbjbaanb
источник
Это имеет смысл, одно решение, содержащее несколько проектов (ваши API-библиотеки, проект приложения).
Снуп
1

Это зависит от того, как структурировано ваше решение и каковы ваши возможности программного обеспечения для контроля версий. Раньше в наших решениях мы использовали несобранный / пропущенный проект, в котором содержалась документация и папка специально для любых сторонних библиотек, на которые есть ссылки. Поскольку это было частью решения, путь к этим файлам можно ссылаться с использованием относительного пути. После того, как мы перешли на TFS 2010, избавились от этого проекта и просто добавили каталог «Поддержка» в папке этого решения в командном проекте параллельно нашим основным ветвям. В любом случае версия библиотеки управления исходным кодом оказывается в одном и том же месте относительно независимо от того, как разработчики настроили свои машины.

Джоэл Этертон
источник
0

При использовании Subversion для контроля версий, вы можете использовать свойство "externals" для этой цели. Это позволяет вам хранить локальную копию общей библиотеки DLL в относительном пути рядом с вашим текущим проектом. Это позволяет легко ссылаться на эту DLL по относительному пути к файлу, который не изменяется, даже если вы измените основной каталог вашего проекта на другую папку. Внешние позволяют вам также определить, какую конкретную версию или ревизию включить.

Док Браун
источник