«Добавить как ссылку» для папок в проектах Visual Studio - PullRequest
118 голосов
/ 31 августа 2010

В Visual Studio мы можем «Добавить как ссылку», чтобы добавить ссылку на файл в другом проекте в решении.

Есть ли способ сделать это для целых папок, чтобы вся папкав проекте A будет виден в проекте B, без необходимости вручную ссылаться на новые элементы в этой папке?

Ответы [ 7 ]

126 голосов
/ 28 февраля 2012

Как указано blogpost , это возможно.

<ItemGroup>
    <Compile Include="any_abs_or_rel_path\**\*.*">
        <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
</ItemGroup>

Но помните, что файлы не будут скопированы.

125 голосов
/ 14 марта 2013

В VS2012 и более поздних версиях вы можете перетащить папку в другой проект, нажав клавишу alt . Это все равно, что добавлять каждый файл как ссылку вручную, но быстрее.

UPD : Попробуйте использовать Общие проекты , если вы используете VS2013 обновление 2 (с Общий менеджер проектов ) или VS2015.

36 голосов
/ 12 января 2013

Одно дополнение к ответ от mo. и комментарий от Marcus, если вы связываете элементы контента, вам нужно будет указать расширение файла:

<ItemGroup>
  <Compile Include="any_abs_or_rel_path\**\*.*">
    <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Compile>
</ItemGroup>
22 голосов
/ 14 января 2013

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

  <ItemGroup>
    <Compile Include="..\anypath\**\*.*">
      <Link>MyData\A\%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
  </ItemGroup>

Это будет включать все файлы из связанного каталога в новой папке в обозревателе решений под названием MyData.Буква «А» в приведенном выше коде может называться как угодно, но она должна присутствовать для того, чтобы папка появилась.

7 голосов
/ 13 февраля 2015

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

<Content Include="any_path\**\*.*">
  <Link>folder_in_B_project\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>
1 голос
/ 21 февраля 2014

Разрушьте оболочку и добавьте символическую ссылку.

runas Администратор, затем

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

символическая ссылка BAM!

/ d указывает ссылку на каталог.

Работает в Vista "из коробки". Может быть перенесен в XP.

Документация здесь: http://technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx

Для тех, кто не знаком с символическими ссылками, это, по сути, указатель на другой файл или каталог. Это прозрачно для приложений. Одна копия на диске, несколько способов ее устранения. Вы также можете создать «жесткую ссылку», которая является не указателем на другой адрес, а действительной записью идентификатора файла в NTFS для того же файла.

ПРИМЕЧАНИЕ: как указано в комментариях, это будет работать только на компьютере, где вы создали символическую ссылку, и не будет работать в системе контроля версий, такой как git.

1 голос
/ 31 августа 2010

Нет способа сделать это для целых папок, но если два проекта находятся в одном решении, вы можете использовать VSCommands 2010 для одновременного копирования нескольких файлов в виде ссылок.посмотрите это видео для получения дополнительной информации http://www.youtube.com/watch?v=fa1M0NGXqMg или перейдите на страницу visualstudiogallery.msdn.microsoft.com/en-us/d491911d-97f3-4cf6-87b0-6a2882120acf?lc=1033

...