"Aggiungi come collegamento" per le cartelle nei progetti di Visual Studio


128

In Visual Studio, possiamo "Aggiungi come collegamento" per aggiungere un collegamento a un file in un altro progetto nella soluzione.

Esiste un modo per farlo per intere cartelle, in modo che un'intera cartella nel progetto A sia visibile nel progetto B, senza la necessità di collegarsi manualmente a nuovi elementi in quella cartella?

Risposte:


142

Come affermato da questo post sul blog , è possibile.

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

Ma attenzione, i file non verranno copiati.


18
+1. È inoltre possibile utilizzare <Content ...>e aggiungere <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>per fare in modo che Visual Studio copi le risorse durante la compilazione.
Markus Jarderot,

8
Prova a usare: <None>...</None>invece di <Compile>...</Compile>. Ma penso che copierà comunque quei file. Anche VisualStudio lo fa con i file collegati.
mo.

4
@mo. la tua risposta aggiunge collegamenti a tutti i file nella radice del progetto, a volte è scomodo. % (RecursiveDir) dovrebbe essere cambiato in un nome di cartella di collegamento: ad esempio per collegare la cartella di origine dal progetto wp7 'MyMainProject' in un altro progetto in questa soluzione: <ItemGroup> <Compilare Includi = ".. \ .. \ MyMainProject \ MyMainProject \ engine *. * "> <Link> engine \% (FileName) </Link> </Compile> </ItemGroup>
Tertium

24
Ho dovuto usare <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>per impedirgli di eliminare le estensioni dai nomi dei file.
Joe Daley,

2
Per le risorse Icon Png: <EmbeddedResource Include = ".. \ .. \ Icons \ 16 * .png">
ChrisB

126

In VS2012 e versioni successive, è possibile trascinare una cartella in un altro progetto con il tasto alt premuto. È lo stesso che aggiungere ogni file come collegamento manualmente ma più velocemente.

upd : Considerare l'utilizzo di progetti condivisi , se si sta utilizzando VS2013 update 2 (con Shared progetto Reference Manager ) o VS2015.


1
In VS2010, in questo modo verranno copiati file e directory anziché aggiungerli come collegamenti, creando duplicati indesiderati.
Tom,

3
Nota: la cartella deve essere trascinata da Windows Explorer (non un'altra istanza di Visual Studio). Inoltre, deve essere un trascinamento del clic sinistro, non un trascinamento del clic destro. Funziona alla grande in VS2012.
davidpricedev,

11
Penso che crei solo collegamenti a tutti i file nella cartella dei sorgenti, non un collegamento alla cartella stessa. Ciò significa che se aggiungi un file alla cartella di origine, non verrà automaticamente collegato.
Johnny5,

1
@MauryMarkowitz, dovresti trascinare una cartella dal progetto VS, non da Windows Explorer o qualcos'altro.
mt_serg,

1
@MauryMarkowitz, soluzione unica, due progetti. Trascina la Cartella1 da Progetto1 a Progetto2 con il tasto Alt premuto. Ogni file da Project1 / Folder1 verrà aggiunto a Project2 / Folder1 come collegamento.
mt_serg,

37

Un'aggiunta alla risposta di Mo. e il commento di Marcus, se si collegano elementi di contenuto, è necessario includere l'estensione del file:

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

di cosa si <Compile ...tratta. Nel mio caso, devo fare riferimento ai .tsfile al mio nuovo progetto. come è fatto. Grazie!
Rahmathullah M,

23

Per quanto riguarda la parte della query originale in cui una cartella collegata viene visualizzata nell'IDE, è possibile raggiungere questo obiettivo in modo che sia presente una cartella in Esplora soluzioni con tutti i file collegati all'interno, anziché tutti i file che appaiono nella radice di la soluzione. Per raggiungere questo obiettivo includere l'aggiunta:

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

Ciò includerà tutti i file dalla directory collegata in una nuova cartella in Esplora soluzioni chiamata MyData. La 'A' nel codice sopra può essere chiamata qualunque cosa ma deve essere lì affinché la cartella appaia.


sembra fare il trucco ma non piega i file Form in uno e dà errori per i loro file .resx (sto usando VB). Grazie comunque.
Ivan Ferrer Villa,

1
@IvanFerrerVilla, sì, ho notato alcuni problemi, ma per la maggior parte va bene solo per l'aspetto.
Adam,

3
Con Visual Studio 2015, questo ha funzionato per me anche senza la "A".
Martin,

7

Se vuoi aggiungere una cartella come riferimento e non vuoi compilarla, usa:

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

0

Elimina il guscio e aggiungi un collegamento simbolico.

allora amministratore di runas

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

Link simbolico BAM!

/ d specifica il collegamento alla directory.

Funziona in Vista su subito. Può essere backportato su XP.

Documentazione qui: http://technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx

Per coloro che non hanno familiarità con i collegamenti simbolici, è essenzialmente un puntatore a un altro file o directory. È trasparente per le applicazioni. Una copia su disco, diversi modi per risolverlo. È inoltre possibile creare un "collegamento reale" che non è un puntatore a un altro indirizzo, ma una voce di ID file effettiva in NTFS per lo stesso file.

NOTA: come indicato nei commenti, funzionerebbe solo sul computer in cui è stato creato il collegamento simbolico e non funzionerebbe in un sistema di controllo versione come git.


2
Ciò sarebbe utile solo per un singolo sviluppatore (a meno che non sia stato creato uno script). Le altre soluzioni fanno parte del codice sorgente condiviso, quindi sono più universalmente utili.
JRoughan

La domanda posta non riguardava il codice sorgente condiviso. Detto questo, msysgit non supporta i collegamenti simbolici, quindi è un peccato.
John Vance,

1
Questa non è una domanda sul filesystem. Inoltre, tieni presente che questa idea produrrà gravi effetti collaterali con diversi sistemi di controllo del codice sorgente e sistemi di backup resore
g.pickardou,

Apparentemente non sono autorizzato a modificare o eliminare la mia domanda. La tua prima obiezione è sciocca. Inoltre, la domanda non era esplicitamente una domanda di modifica dei file di progetto, quindi dovresti sottovalutare anche tutte quelle risposte. Si nota la tua seconda obiezione, e se potessi modificare la mia risposta per aggiungere quell'avvertimento, lo farei.
John Vance,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.