2010-07-19 16 views
8

Non è correlato al codice ma è correlato all'IDE. Sto lavorando a una soluzione .NET con circa 35 diversi progetti. Questi progetti devono essere riorganizzati in una nuova struttura di cartelle. Perché? Perché circa 10 di questi saranno rimossi e il resto sarà diviso in più unità logiche. Un modo per farlo è creando una nuova soluzione, trascina & Trascina i progetti in un nuovo albero di cartelle all'interno di Esplora risorse di Windows e quindi aggiungili alla nuova soluzione. A dire il vero, sembra stupido!Spostamento di file di progetto in un progetto .NET

C'è un modo per spostare semplicemente i progetti in diverse cartelle dall'interno dell'IDE? Ho provato a "salvare con nome" i progetti ma l'IDE non accetta una cartella diversa.

È irritante, ma poiché ci sono state alcune scelte sbagliate nei nomi delle cartelle, ora sono bloccato con questi nomi.


Esempio: In questo momento ho una cartella principale del progetto che contiene cartelle figlio denominate "Client", "Server", "Business", "Database" e quant'altro. All'interno di quelle cartelle figlio, ci sono più cartelle figlio, ognuna con un numero di tre cifre. All'interno di ogni cartella numerata c'è un progetto che viene chiamato in qualche modo logico, come Company.Business. Clienti con logica addizionale all'interno di questo progetto. Il problema è che non tutti i progetti ora seguono questa convenzione di denominazione e la considero obsoleta. Un progetto come Company.Business. I clienti devono essere in una cartella denominata Company.Business. Clienti nella radice del progetto, quindi è più facile da riconoscere. Il nome chiarisce già che si tratta di una business class per questo progetto. La chiara divisione all'interno delle classi cliente, delle business class e di qualsiasi altra cosa deve essere sistemata all'interno della soluzione, ma voglio appiattire la struttura dei file. (E rimuovere alcuni progetti obsoleti.) Fondamentalmente, non sto ristrutturando, sto solo ripulendo. VS2008 non sembra avere una tale opzione, anche se ...

+0

In solution explorer è disponibile il pulsante "Mostra tutti i file" che consente di accedere ad altre cartelle non associate al progetto, in modo che sia possibile creare nuove cartelle da Esplora soluzioni, trascinare i progetti desiderati e destra -click "includi nel progetto" includile per proiettare ... Spero di averti capito. = D – Cipi

+0

Stai chiedendo di riorganizzare i progetti su disco o in Solution Explorer o entrambi? In entrambi i casi probabilmente modificherò il file .sln direttamente per le modifiche. – Rup

+1

Riorganizzazione solo su disco. Riorganizzare in Solution Explorer è semplice come Drag & Drop. –

risposta

0

Ho usato la seguente soluzione per risolvere il mio problema:

  1. Ho iniziato con una nuova soluzione vuota in una nuova cartella.
  2. Per ogni progetto che è stato necessario spostare, ho utilizzato Windows Explorer per creare una cartella figlio nella cartella della soluzione, questa volta con il nome corretto.
  3. Ho copiato i progetti dalla loro posizione originale nelle loro nuove cartelle.
  4. Ho aggiunto tutti i progetti esistenti (spostati) dalle loro nuove posizioni.
  5. In Solution Manager, ho rinominato i progetti con un nome migliore.
  6. Ho corretto le proprietà del progetto e altre impostazioni per tutti i progetti.

Questo ha pulito l'intero progetto abbastanza bene.Ho quindi aggiunto l'intero progetto a Vault (Version Control System) e una volta nel VSS, ho eliminato di nuovo la cartella (in realtà, l'ho appena rinominata per prima) e recuperata dal sistema VSS in modo che eventuali binari e altri rifiuti obsoleti fossero andato anche È molto lavoro, ma il risultato è risultato esattamente quello di cui aveva bisogno.

1

Non penso che ci sia una risposta facile qui. Il tuo problema principale sta nel fatto che Visual Studio (o .NET) non si preoccupa se ci sono classi che appartengono a uno spazio dei nomi di root diverso seduto in un progetto.

Quindi, se si ha un progetto denominato Project.BusinessObjects e un altro progetto denominato Project.DataObjects, non vi è nulla che impedisca di inserire una classe denominata Project.BusinessObjects.User nel progetto Project.DataObjects.

Non conosco alcun modo di fare tutto questo senza un sacco di lavoro manuale. Resharper ti aiuterà parecchio se usi la funzione 'rinomina spazio dei nomi', ma finirai comunque con un sacco di lavoro da grugnito.

1

Inoltre, sii MOLTO cauto nel fare ciò in combinazione con i sistemi di controllo versione. Devi conoscere molto bene il tuo sistema di controllo delle versioni per sapere come reagirà a questo importante refactoring.

Oltre a ciò, quello che stai descrivendo non è poi così difficile. È necessario modificare manualmente i file della soluzione e, eventualmente, i file del progetto e potrebbe essere necessario rimuovere un progetto da una soluzione e aggiungerlo di nuovo quando si trova nella directory corretta.

Farei un backup, quindi rifattore. Penso che sia un errore pensare che tu possa fare tutto ciò che ti serve dall'IDE, però. E se fai ciò che descrivi dall'IDE in un sistema di controllo del codice sorgente che utilizza la vecchia API di Visual SourceSafe, certianamente (garantito) rovinerai i tuoi binding, che l'API non è fatta per lo spostamento (o la ridenominazione, se è per questo) file in giro nel modo in cui descrivi. Il modo migliore per farlo in questo scenario è rimuovere tutti i collegamenti di controllo del codice sorgente e quindi aggiungere nuovamente la soluzione riorganizzata.

Non è così difficile, devi solo preparare (fare un backup) e sperimentare fino a quando non è corretto.

+0

Sto utilizzando Vault per il controllo della versione e, in pratica, l'intero oggetto verrà spostato in un altro database VCS, quindi diventa un nuovo progetto all'interno di Vault. Ecco perché è perfetto per rinominare la struttura delle cartelle in questo momento! –

+0

Ottimo, quindi rimuovi i collegamenti di controllo del codice sorgente, crea un backup (tutto in ZIP) e rinomina/sposta i file. Mantenere il file della soluzione in sincronia con le posizioni fisiche dei file e aprire la soluzione in VS ogni tanto per assicurarsi che tutto sia corretto finora. –

+0

Ho un sacco di sviluppo con Delphi e Delphi mi consente di salvare i file di progetto in una cartella diversa. Ecco perché speravo in una soluzione simile all'interno di VS2008. Lo spostamento di progetti in Delphi non è molto complesso. Ma in VS2008 ... È una caratteristica mancante. –

6

Fire up notepad.exe e aprire il file .sln. E avvia Windows Explorer, vai alla directory della soluzione. Osservare come il contenuto del file .sln corrisponde alla struttura della soluzione. Modifica le voci, apporta le modifiche corrispondenti con Explorer. Prima il backup

1

Non penso che ci sia un modo per farlo da Visual Studio, e come @gmagana sottolinea che sarà molto difficile da fare se i file sono sotto controllo di versione.

Tuttavia, è possibile farlo manualmente.

Inizia creando la nuova struttura di cartelle desiderata: ignora i file .csproj e i file di soluzione per ora e più i file .cs che ti interessano nella nuova struttura.

Ora, avviare Visual Studio e creare un nuovo progetto vuoto. Se hai diversi tipi di progetti, potresti voler creare un nuovo progetto vuoto per ogni tipo. Questo ti lascerà un file .csproj vuoto e un file .sln con un solo progetto.

Copiare il file di progetto vuoto nel punto in cui sono necessari e rinominarli in base alle esigenze. Puoi modificarli e cambiare il nome dell'Assembly e lo spazio dei nomi predefinito se lo desideri, oppure attendere fino a quando non hai finito e modificare le impostazioni con Visual Studio.

Infine, modificare il file .sln e rimuovere la sezione Progetto. Copia il file .sln vuoto nel punto desiderato e aprilo in Visual Studio. Ora vai e aggiungi ciascuno dei tuoi progetti esistenti alla nuova soluzione.

All'interno di ciascun progetto, fare clic sul pulsante "Mostra tutto" e iniziare a includere tutti i file copiati nella struttura del progetto. Risolvi le dipendenze mancanti, modifica gli spazi dei nomi e il nome dell'assembly per il progetto e assicurati che i file di codice non specifichino uno spazio dei nomi che non desideri. Ripeti fino al termine.

Una volta ottenuta la nuova soluzione da compilare, sarà utile aprire le DLL in Reflector per assicurarsi di non aver perso nessuna dichiarazione dello spazio dei nomi nel file di codice - se si sta tentando di arrivare a un punto in cui c'è una corrispondenza di 1-1 tra la DLL e lo spazio dei nomi, o anche assicurando che nessuno spazio dei nomi sia diviso tra DLL, Reflector è tuo amico.

Buona fortuna.

+0

Ho 35 diversi progetti e circa 300 file .cs. Questa è un'opzione abbastanza complessa. Penserei che spostare il .csproj con i file .cs dovrebbe renderlo più facile. –

+0

La tua domanda sembrava implicare che avresti spostato alcuni file in nuovi progetti, rinominando percorsi, ecc. Penso che sia più facile fare la reorg sul file system, quindi aggiungere di nuovo tutto, piuttosto che cercare di capire cosa è stato spostato, ciò che non è stato, ecc. Sì, è complesso, ma quello che stai cercando di fare è complesso - e il mio suggerimento è davvero solo una cosa, fatto allo stesso modo più e più volte. – chris

Problemi correlati