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

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

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

Ответ 1

Как говорится в этом посте, это возможно.

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

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

Ответ 2

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

обн: Рассмотрите возможность использования общих проектов, если вы используете обновление VS2013 2 (с общим диспетчером проектов) или VS2015.

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Руна Администратор тогда

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

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

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

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

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

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

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