"Добавить как ссылку" для папок в проектах Visual Studio

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

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

7 ответов


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

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

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


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

upd: Рассмотрите возможность использования Совместные Проекты если вы используете VS2013 update 2 (с Общий Менеджер Ссылок Проекта) или VS2015.


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

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

извините за дополнительный ответ, у меня недостаточно репутации, чтобы добавить комментарий.


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

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

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


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

<Content Include="any_path\**\*.*">
  <Link>folder_in_B_project\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>

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


вытащите оболочку и добавьте символическую ссылку.

администратор runas тогда

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

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

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

работает в Vista, на "из коробки". Может быть возвращен в XP.

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

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

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