Come faccio ad aggiungere un albero di directory esistente a un progetto in Visual Studio?


824

Il problema è davvero semplice. Invece di creare cartelle in Visual Studio, creo una struttura di directory per il mio progetto sul file system. Come posso includere tutte le cartelle e i file in un progetto, mantenendo la struttura?

Se "Aggiungi file esistente" su una cartella denominata Servizi e accedo a un file nella struttura della directory. Servizi> Gestione account> CreateAccount.cs, viene visualizzato in Visual Studio in questo modo: Servizi> CreateAccount.cs. Non voglio questo.

Ho già elaborato un'intera struttura di directory, poiché imito i nostri sviluppatori client utilizzando la stessa struttura per l'organizzazione. Come faccio ad aggiungere tutte le cartelle e i file al progetto in Visual Studio? O devo fare quello che fa la maggior parte degli utenti Microsoft e "tollerarlo" e ricreare ogni singola cartella tramite Visual Studio?



Risposte:


1438

È necessario inserire la struttura della directory nella directory del progetto. E quindi fai clic sull'icona "Mostra tutti i file" nella parte superiore della casella degli strumenti di Esplora soluzioni. Successivamente, verrà visualizzata la directory aggiunta. Sarà quindi necessario selezionare questa directory, fare clic con il tasto destro del mouse e selezionare "Includi nel progetto".

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


150
C'è un modo per farlo con una directory (albero) al di fuori della directory del progetto?
imre,

2
C'è un modo per farlo per una cartella che NON è una sottodirectory di dove si trova il tuo progetto? ad es .: E: \ ProjectX \ project.vcproj include la cartella E: \ Common * .cs ??
Matt Connolly,

4
Funziona quasi. Riesco a vedere l'albero delle directory e aggiungere più file, ma non mi consente di aggiungere un'intera directory inclusi i sottoalberi.
ManicBlowfish

5
Il problema è che FUNZIONA SOLO se si copia l'albero delle directory nel progetto Visual tramite Windows Explorer. Come puoi fare se vuoi solo fare riferimento ad alcune cartelle e file contenuti in un altro progetto sul tuo computer?
hico,

5
L'unico modo che conosco per farlo fuori del progetto sta usando un link simbolico ... vedi la mia risposta: stackoverflow.com/a/26537736/835561
Edyn

77

È inoltre possibile trascinare e rilasciare la cartella da Esplora risorse nella finestra della soluzione di Visual Studio.


14
Questo non funziona nella mia installazione di VS 2010 su Vista Ultimate a 64 bit.
John Melville,

13
No, non funziona neanche nella mia installazione VS 2010 su Windows 7.
AH.

9
Confermando che questo non funziona anche in VS 2010 (modalità non amministratore)
David Gardiner

9
Non penso che voi lo stiate facendo bene. VS 2010 supporta il drag n drop della cartella. Lo faccio sempre per includere i miei kit di strumenti. Devi assicurarti di cadere nell'albero del progetto. Il pannello della soluzione e il nodo della soluzione stessa non riceveranno il rilascio. Il sistema operativo è irrilevante qui, ma per dubbiosi, utilizzo Windows 7 a 64 bit.
Gavin Williams,

4
Gli "elementi soluzione" sono diversi dall'aggiunta di elementi a un progetto. Gli elementi della soluzione sono una cartella speciale all'interno della soluzione VS.
Todd Smith,

53

In Visual Studio 2015, ecco come lo fai.

Se si desidera includere automaticamente tutti i file discendenti sotto una cartella specifica:

<Content Include="Path\To\Folder\**" />

Questo può essere limitato per includere solo i file nel percorso specificato:

<Content Include="Path\To\Folder\*.*" />

O anche solo i file con un'estensione specificata:

<Content Include="Path\To\Folder\*.jpg" >

Riferimento: http://jamesrpatterson.com/blog/automatic-include-in-project-for-visual-studio


3
L'ho trovato utile perché potevo quindi includere un singolo tag per "copia sempre in fase di creazione", anziché dover annotare ogni singolo file (come nel caso della risposta accettata)
Gordon Bean,

3
IMO una delle risposte più utili qui.
Sinjai,

Dove viene aggiunto? Come si arriva a una vista XML in VS?
Matthew Dean,

1
questa è la soluzione migliore quando si desidera aggiungere una cartella gerarchica di grandi dimensioni mentre Visual Studio non risponde e si blocca.
Gowtham Alan,

1
È un peccato per il team Microsoft VS
dejjub-AIS

33

Copia e incolla .

Per aggiungere una cartella, tutte le sottodirectory e i file possiamo anche copiare e incollare. Ad esempio possiamo:

  1. Fare clic con il tasto destro in Esplora risorse di Windows sulla cartella e Copia sulla cartella con molti file e cartelle.

  2. Quindi in Esplora soluzioni di Visual Studio, fare clic con il tasto destro sulla cartella di destinazione e fare clic su Incolla.

  3. Opzionale aggiungere a TFS; Quindi, nella cartella in alto, fai clic con il pulsante destro del mouse e accedi a TFS per archiviare tutte le sottocartelle e i file.


Questo ha funzionato per me, ma il trascinamento della selezione non ha funzionato in VS14 e Windows 10 Pro.
Mona Jalal,

1
il trascinamento della selezione potrebbe non funzionare a meno che tu non stia eseguendo VS come amministratore
RThomas il

18

È possibile utilizzare un collegamento simbolico. Questo fa sì che la modifica del file in un progetto lo modifichi nell'altro (poiché in realtà è lo stesso file).

Per farlo:

  1. Apri il cmd prompt come amministratore
  2. mklink / d [nome directory del progetto corrente] [directory in un altro progetto a cui dovrebbe puntare]

Ciò ha svantaggi e insidie, ma lo uso occasionalmente per librerie duplicate che richiedono nomi diversi.

Modifica per Anoop: passaggi da aggiungere a Visual Studio:

  1. Crea un collegamento nella cartella del progetto usando i passaggi precedenti.
  2. In Visual Studio ... selezionare il progetto in Esplora soluzioni.
  3. Nella parte superiore di Esplora soluzioni ... fai clic sul pulsante Mostra tutti i file (potrebbe essere necessario fare clic due volte se è già attivo).
  4. Il link ora verrà mostrato nel tuo progetto ... fai clic con il pulsante destro del mouse e scegli Includi nel progetto.

Questi sono i passaggi che seguo e funzionano per un paio di progetti diversi.


Non funziona! i collegamenti simbolici non sono riconosciuti come cartelle
Anoop K. Prabhu,

1
@Anoop: ho aggiunto i passaggi per mostrare come utilizzo questo metodo. Per favore, provalo.
Edyn,

1
Sta funzionando! Stavo cercando di creare un collegamento facendo clic con il pulsante destro del mouse sulla cartella, invece di utilizzare il prompt dei comandi e quindi non ha funzionato. Seguire i passaggi sopra descritti risolto il problema. Grazie
Anoop K. Prabhu il

1
Nota: mklink non funzionerà su un file system FAT. È per NTFS.
Adrian,

Il controllo del codice sorgente causerà il caos con i collegamenti simbolici. Git necessita dei privilegi di amministratore o controlla semplicemente il file.
Bloke CAD

13

In Visual Studio 2017, si passa da Solution View e visualizzazione cartella avanti e indietro. Penso che questa sia un'opzione migliore, perché manterrà la soluzione più pulita. Lo uso per modificare file .gitignore, .md, ecc.

Vista soluzione e vista cartella


5
La domanda è su come aggiungere una cartella esistente alla soluzione, non solo per visualizzare le cartelle.
CShark,

1
Questa è davvero un'ottima opzione per vedere la struttura attuale, aprire una cartella in Esplora file ecc., Ma sfortunatamente non è possibile aggiungere un albero di cartelle esistente dalla vista delle cartelle. Ciò è possibile solo nella vista della soluzione, come l' ha descritta Gant .
Matt,

12

Per espandere la risposta di Yuchen , è possibile includere file e percorsi come collegamento. Non è la stessa cosa dell'aggiunta degli elementi esistenti perché non crea una copia aggiuntiva nella struttura delle cartelle del progetto. È utile se si desidera utilizzare una cartella / file canonico ecc. In molti luoghi diversi, ma si desidera conservare solo una versione / copia di esso.

Ecco un esempio di ciò che è possibile aggiungere a un *.csprojfile per creare il collegamento

<Compile Include="$(Codez)\z.Libraries\Common\Strings\RegexExtensions.cs">
    <Link>Helpers\RegexExtensions.cs</Link>
</Compile>

<Compile Include="..\..\z.Libraries\MoreLINQ\MoreLinq\ExceptBy.cs">
    <Link>Helpers\ExceptBy.cs</Link>
</Compile>

<Content Include="C:\Codez\Libs\Folder\OtherFolder\**\*.*">
    <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

$(Codez) è una variabile di ambiente Windows che ho definito, è possibile utilizzare le variabili di ambiente integrate allo stesso modo.

L'ultimo gruppo di esempio è un gruppo di file di contenuto di cui ho bisogno nell'output finale. Vedi https://stackoverflow.com/a/11808911/492 e altre risposte e collegamenti lì per ulteriori informazioni al riguardo.

Maggiori informazioni su MSBuild su https://msdn.microsoft.com/en-us/library/bb629388.aspx


2
Questa dovrebbe essere la risposta!
Jurijs Kastanovs,

4

Penso di aver trovato un modo per farlo con Compile Include = ". \ Code ***. Cs" Quello che volevo è includere il codice ricorsivamente nella mia cartella Code.

Ecco l'esempio del file di progetto.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0" DefaultTargets="BuildTarget">
    <PropertyGroup>
        <OutputType>Library</OutputType>
    </PropertyGroup>
    <PropertyGroup>
        <StartupObject />
    </PropertyGroup>
    <PropertyGroup>
        <RootNamespace>Autogen</RootNamespace>
    </PropertyGroup>
    <ItemGroup>
        <Compile Remove="@(Compile)" />
        <Compile Include=".\Code\**\*.cs" />
    </ItemGroup>
    <Target Name="BuildTarget">
        <Message Text="Build selected" Importance="high"/>
    </Target>
</Project>

2

In Visual Studio 2013, non sono riuscito a far funzionare "Includi nel progetto" quando si fa clic con il tasto destro su una cartella. Ciò che ha funzionato è stato espandere la cartella, selezionare tutti i file e scegliere "Includi nel progetto". È stato abbastanza noioso poiché devi fare ogni cartella una per una (ma almeno puoi fare tutti i file in ogni cartella in una volta sola) e sembra memorizzare il percorso del file (puoi vederlo visualizzando le proprietà sul file e guardando l'opzione "Percorso relativo".)

Spero di usarlo per distribuire alcuni file di dati in un progetto del programma di installazione di Visual Studio e sembra raccogliere i file inclusi e preservarne i percorsi.


0

Per quanto ne so, l'unico modo per farlo in VS2010 è simile al metodo di trascinamento della selezione. Fare clic con il tasto destro del mouse sulla soluzione a cui si desidera aggiungere un progetto. Il menu dell'applicazione avrà un elemento Aggiungi ... Aprendolo, scopri che una delle opzioni è quella di aggiungere un progetto esistente alla soluzione.

Nella finestra di dialogo che si apre, vai alla cartella contenente il file di progetto per la soluzione e selezionalo. VS, durante l'importazione di quel file di progetto, importa anche l'intera directory e, presumo, tutte le directory subordinate che fanno parte di quel progetto.

Poiché ciò richiede un file di progetto esistente, non sarà impossibile importare un albero di directory finché quell'albero non è stato convertito in un progetto.


0

Non ho trovato risposta alla mia soddisfazione, quindi ho capito da solo.

Ecco la risposta a te se vuoi aggiungere codici sorgente esterni al tuo progetto e non vuoi copiarli sugli interi codici. Ho molte dipendenze da altri git e vengono aggiornati ogni ora se non minuziosamente. Non riesco a fare copie ogni ora per la sincronizzazione. Ecco cosa devi fare.

Supponiamo che questa sia la struttura:

/ Root / proja / src

/ Root / proja / include

/ Root / projB / src

/ Root / projB / include

/ Root / yourProj / src

/ Root / yourProj / include

  1. Avvia la tua soluzione VS.
  2. Fare clic con il tasto destro del mouse sul nome del progetto proprio sotto la soluzione.
  3. Quindi fare clic su "Aggiungi", "Nuovo filtro", inserire il nome "projA" per projA.
  4. Fai clic con il tasto destro del mouse su "projA", fai clic su "Aggiungi", "Nuovo filtro", inserisci il nome "src"
  5. Fai clic con il tasto destro del mouse su "projA", fai clic su "Aggiungi", "Nuovo filtro", inserisci il nome "include"
  6. Fare clic con il tasto destro del mouse su "projA" / "src", fare clic su "Aggiungi", "Articolo esistente", quindi selezionare / root / projA / src per aggiungere tutti i codici sorgente o uno per uno per quelli desiderati.
  7. Fare lo stesso per "projA" / "include"
  8. Fare lo stesso per projB. Ora i progetti esterni / esistenti al di fuori dei tuoi sono presenti nella tua soluzione / progetto. Il VS li compilerà insieme. Ecco un trucco. Poiché projA e projB sono cartelle virtuali all'interno del progetto, il compilatore potrebbe non trovare projA / include.

  9. Se non trova il projA / include, quindi fai clic con il pulsante destro del mouse sul progetto, seleziona "Proprietà".

  10. Passare a "C / C ++". Modifica "Directory di inclusione aggiuntive", aggiungi il tuo projA / include come tale "../projA/includes", percorso relativo.

Un avvertimento, se ci sono file include / header duplicati, il "escludi dal progetto" sul "file di intestazione" non funziona davvero. È un bug in VS.


0

Visual Studio 2017 e versioni successive supportano un nuovo .csprojformato leggero che è diventato noto come "formato SDK". Uno dei numerosi vantaggi di questo formato è che invece di contenere un elenco di file e cartelle inclusi , i file sono caratteri jolly inclusi per impostazione predefinita. Pertanto, con questo nuovo formato, i tuoi file e cartelle - aggiunti in Explorer o sulla riga di comando - verranno raccolti automaticamente!

Il .csprojfile di formato SDK attualmente funziona con i seguenti tipi di progetto :

  • Progetti di biblioteche di classe

  • App console

  • App Web ASP.NET Core

  • Progetti .NET Core di qualsiasi tipo

Per utilizzare il nuovo formato, creare un nuovo progetto .NET Core o .NET Standard. Poiché i modelli non sono stati aggiornati per .NET Framework completo nemmeno in Visual Studio 2019, per creare una libreria di classi .NET scegliere il modello di libreria standard .NET, quindi modificare il file di progetto in modo da scegliere la versione del framework desiderata ( il nuovo formato di progetto di stile può essere modificato in Visual Studio: basta fare clic con il tasto destro del mouse su Esplora soluzioni e selezionare "Modifica file di progetto"). Per esempio:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
</Project>

Ulteriori letture:

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.