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


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

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

7 108

7 ответов:

Как это блогпост указано, что это возможно.

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

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

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

upd: Рассмотрите возможность использования Совместные Проекты если вы используете обновление VS2013 2 (с Shared Project Reference Manager) или 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. "А" в приведенном выше коде можно назвать чем угодно но должен быть там, чтобы папка появилась.

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

<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

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

Запуск от имени администратора затем

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

БАМ символическая ссылка!

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

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

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

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

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