"Додати як посилання" для папок у проектах Visual Studio


127

У Visual Studio ми можемо "Додати як посилання", щоб додати посилання на файл в іншому проекті у рішенні.

Чи можливо це зробити для цілих папок, щоб у проекті B була видна вся папка в проекті A, без необхідності вручну посилатися на нові елементи в цій папці?

Відповіді:


141

Як зазначено в цьому дописі на блозі , це можливо.

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

Але пам’ятайте, що файли не будуть скопійовані.


18
+1. Ви також можете використовувати <Content ...>та додати, <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>щоб змусити Visual Studio копіювати ресурси, що збираються.
Маркус Джардеро

8
Спробуйте використовувати: <None>...</None>замість <Compile>...</Compile>. Але я думаю, це все-таки скопіює ці файли. Навіть VisualStudio робить це із пов'язаними файлами.
мо.

4
@mo. Ваша відповідь додає посилання на всі файли в корені проекту, іноді це незручно. % (RecursiveDir) слід змінити на деяку назву папки посилань: наприклад, для посилання вихідної папки з проекту wp7 'MyMainProject' в іншому проекті цього рішення: <ItemGroup> <Compile Include = ".. \ .. \ MyMainProject \ MyMainProject \ engine *. * "> <Link> двигун \% (FileName) </ Посилання> </ Compile> </ ItemGroup>
Tertium

23
Мені довелося скористатися, <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>щоб не скидати розширення з імен файлів.
Джо Дейлі

2
Для ресурсів Icon Png: <EmbeddedResource Include = ".. \ .. \
icons

126

У VS2012 та пізніших версіях ви можете перетягнути папку до іншого проекту, натиснувши клавішу alt . Це точно так само, як додавати кожен файл як посилання вручну, але швидше.

upd : Подумайте про використання спільних проектів, якщо ви використовуєте оновлення VS2013 2 (за допомогою диспетчера спільних проектів ) або VS2015.


1
У VS2010 це робить копіювати файли та каталоги, а не додавати їх у вигляді посилань, створюючи небажані дублікати.
Том

3
Примітка: папку потрібно перетягнути з Windows Explorer (не інший приклад візуальної студії). Крім того, це повинно бути перетягуванням лівою кнопкою миші, а не перетягуванням правою кнопкою миші. Чудово працює у VS2012.
davidpricedev

11
Я думаю, що це просто створює посилання на всі файли в папці джерел, а не посилання на саму папку. Це означає, що якщо ви додасте файл до вихідної папки, він не буде автоматично пов’язаний.
Джонні5

1
@MauryMarkowitz, вам слід перетягнути папку з проекту VS, а не з Windows Explorer або чогось іншого.
mt_serg

1
@MauryMarkowitz, єдине рішення, два проекти. Перетягніть папку1 з Project1 до Project2 натиснутою клавішею alt. Кожен файл з Project1 / Folder1 буде доданий до Project2 / Folder1 як посилання.
mt_serg

37

Одне доповнення до відповіді від мо. і коментар від Маркуса, якщо ви пов'язуєте елементи вмісту, вам потрібно буде включити розширення файлу:

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

що це <Compile ...в цьому. У моєму випадку мені потрібно направити .tsфайли на мій новий проект. як це робиться. Дякую!
Рахматулла M

23

Що стосується частини оригінального запиту, щоб пов’язана папка відображалася в IDE, цього можна досягти, тому в провіднику рішень є папка з усіма пов'язаними файлами всередині, а не всі файли, що з’являються в корені рішення. Для досягнення цього слід включити доповнення:

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

Сюди ввійдуть усі файли із пов'язаного каталогу у новій папці в Провіднику рішень під назвою MyData. "А" у наведеному вище коді можна назвати чим завгодно, але він повинен бути там, щоб папка з’явилася.


це здається, що це зробити трюк, але не згинає файли форм в один і видає помилки для їх .resx-файлів (я використовую VB). Все одно, дякую.
Вілла Івана Феррера

1
@IvanFerrerVilla, так, у мене є деякі проблеми, які я помітив, але здебільшого це добре лише для зовнішнього вигляду.
Адам

3
З Visual Studio 2015 це працювало для мене навіть без "A".
Мартін

7

Якщо ви хочете додати папку в якості посилання, і ви не хочете її компілювати, використовуйте:

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

0

Вирвіть оболонку і додайте символічне посилання.

runas Administrator тоді

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

БАМ символічне посилання!

/ d вказує посилання на каталог.

Працює у Vista на непридатному стані. Можна підтримувати в XP.

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

Для тих, хто не знайомий із символічними посиланнями, це, по суті, вказівник на інший файл чи каталог. Це прозоро для додатків. Одна копія на диску, кілька способів її вирішення. Ви також можете зробити "жорстке посилання", яке не є вказівником на іншу адресу, а фактичним записом ідентифікатора файлу в NTFS для того самого файлу.

ПРИМІТКА: як зазначено в коментарях, це працюватиме лише на комп'ютері, де ви створили симпосилання, і не працюватиме в системі управління версіями, як git.


2
Це було б корисно лише одному розробнику (за винятком сценаріїв). Інші рішення входять до спільного вихідного коду, тому є більш загальнокорисними.
JRoughan

Задане питання стосувалося не спільного вихідного коду. При цьому, msysgit не підтримує символьні посилання, тому об'ємніше.
Джон Ванс

1
Це не питання файлової системи. Також зверніть увагу, що ця ідея спричинить серйозні побічні ефекти з різними системами контролю джерел та резервними резонансними системами
g.pickardou

Мабуть, мені заборонено редагувати чи видаляти запитання. Ваше перше заперечення - дурне. Питання також не було явним питанням редагування файлів проекту, тож вам слід також оскаржити всі ці відповіді. Ваше друге заперечення зазначається, і якби я зміг змінити свою відповідь, щоб додати цей застереження, я би сказав.
Джон Ванс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.