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


9

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

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

Ответы:


21

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

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

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

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


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 ++, как правило, все еще работают, потому что у них нет сборок с версиями или подобных аспектов, которые могут вызвать проблемы с вызовом компонентов. Этот подход работает хорошо, но вы не всегда можете предположить, что частичные сборки в порядке, все это сводится к нулю, и перестройка является наиболее безопасной.


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

1

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.