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, создайте новый реферин для класса.
Ответ 6
VS имеет некоторые полезные расширения для этого:
http://vscommands.com
и ProjectsLinker: http://visualstudiogallery.msdn.microsoft.com/5e730577-d11c-4f2e-8e2b-cbb87f76c044?SRC=VSIDE
Ответ 7
и SourceShare: http://visualstudiogallery.msdn.microsoft.com/aa5d54dd-0b05-4689-ad2f-634e86de327f?SRC=VSIDE