Visual Studio: добавьте элемент/Добавить как ссылку, а не просто добавьте

Я новичок в визуальной студии, приехавшей из Delphi.

У меня есть дерево каталогов, полное файлов .cs(root is\Common).
У меня также есть дерево каталогов, полное приложений (root is\Applications)
Наконец, у меня есть дерево, полное Ассамблей (root is\Assemblies)

Я хочу сохранить мои файлы .cs в дереве Common и всей среде voodoo (решения, проекты, настройки, метаданные, данные отладки, bin и т.д.) в дереве Assemblies. Итак, для простого примера у меня есть сборка под названием PdMagic.Common.Math.dll. Решение и проект находятся в \Assemblies\Common\Math. Все исходные файлы (.cs) находятся в \Common\Math. (matrix.cs, trig.cs, mathtypes.cs, mathfuncs.cs, stats.cs и т.д.)

Когда я использую Добавить существующий элемент для добавления matrix.cs в мой проект, его копия добавляется в папку \Assemblies\Common\Math. Я просто хочу обратиться к нему. Я не хочу, чтобы несколько копий лежали вокруг. Я попытался добавить существующий элемент и использовал раскрывающийся список "Добавить ссылку", а не просто "Добавить", и это похоже на то, что я хочу.

Вопрос: Какая "лучшая практика" для такого рода вещей? Большинство людей просто помещают эти файлы .cs в ту же папку, что и проект? Почему не "Добавить ссылку" по умолчанию?

Спасибо!

Ответы

Ответ 1

"Лучшая практика" в этом случае - не бороться с инструментом. Он позволяет делать то, что вы хотите, но вы получите больше работы и сможете сосредоточиться на коде, если вы просто разрешите IDE организовать для вас свой проект.

Я бы создал пустой проект проекта PdMagic.Common

Это даст вам файловую структуру, например

PdMagic.Common\
PdMagic.Common\PdMagic.Common.sln

то я обычно добавляю папку src и libs (через файловую систему, а не VS)

внутри папки libs, я поместил бы все свои зависимые от третьей стороны, а в папке src будут сохранены все мои проекты

PdMagic.Common\
PdMagic.Common\PdMagic.Common.sln
PdMagic.Common\libs
PdMagic.Common\libs\nunit
PdMagic.Common\src

Затем, в Visual Studio, я бы щелкнул правой кнопкой мыши по только что созданному решению и нажал "Добавить → Новый проект", я бы указал, что хотел создать его в папке \src и называть его PdMagic.Common. Math

Теперь моя структура папок будет выглядеть следующим образом

PdMagic.Common\
PdMagic.Common\PdMagic.Common.sln
PdMagic.Common\libs
PdMagic.Common\libs\nunit
PdMagic.Common\src
PdMagic.Common\src\PdMagic.Common.Math
PdMagic.Common\src\PdMagic.Common.Math\PdMagic.Common.Math.csproj
PdMagic.Common\src\PdMagic.Common.Math\Class1.cs

Затем, когда вы добавляете классы в свой проект PdMagic.Common.Math, они войдут в папку с файлом проекта. Именно так в среде IDE есть мнение, что мы должны работать, и я думаю, что большинство разработчиков идут на это, потому что попытка получить любой другой макет в файловой системе потребует слишком много борьбы с IDE. Я знаю, что это может быть трудно прийти из другой конвенции, и вы инстинктивно хотите, чтобы те же конвенции в новой среде. Однако, если вы придерживаетесь конвенций, (по вашему мнению, это правильно или неправильно), вы получите больше результатов, потому что вы не будете пытаться заставить IDE делать что-то, как вы думаете, что они должны быть сделаны.

Ответ 2

Вы можете просто использовать Добавить как ссылку, нажав на маленькую стрелку вниз справа от кнопки добавления из команды Добавить → Существующий элемент...

(Thanks Peter)

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

Ответ 3

Я думаю, что "наилучшей практикой" является использование этих "общих" подпрограмм в сборке, которые вы можете ссылаться вместо того, чтобы вытаскивать исходные файлы в кучу разных проектов. Вы можете добавить его как предварительно собранную сборку с "Добавить ссылку..." или включить проект для этой сборки и добавить ссылку на проект (также в диалоговом окне "Добавить ссылку..." ).

Это одна из тех вещей, которые кажутся немного полезными для первоначальной настройки (и это может быть), но в целом она окупается в конечном итоге.

Ответ 4

Если вы хотите "ссылаться" на matrix.cs в своем проекте, не используйте "Добавить существующий элемент", создайте ссылку ( "Добавить ссылку" ) в библиотеку или объект класса, частью которой является matrix.cs. Если вы не хотите (или не можете использовать) библиотеку или объект, к которому относится matrix.cs, тогда добавьте ссылку, как вы ее получите, но я никогда не использовал эту особенность.

Ни один из разработчиков, с которыми я когда-либо работал, в .NET изолировал свои .cs файлы в отдельных папках. Единственный вид сегрегации, который я видел как практика, - это MVC, где модели, представления и контроллеры находятся в их собственных папках.

Ответ 5

Поскольку вы хотите ссылаться на matrix.cs в проекте, просто не используйте AddExistigItem, создайте новый реферин для класса.