"Добавить как ссылку" для папок в проектах 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.