2011-10-06 11 views
7

Sto usando VS2010 con Resharper 5.1.Sostituire l'utilizzo di una classe in un progetto specifico

Ho due progetti, un progetto di libreria (Lib) e un progetto di applicazione (App), riferimenti App Lib.

Lib contiene una classe X che viene utilizzata sia in App che in Lib. In App ora voglio sostituire tutti gli usi di X con la classe Y. Nel mio caso Y non è correlato a X, ma potrebbe ereditare da X se rende più semplice il refactoring.

Il piano corrente per utilizzare la funzione "Trova utilizzi", raggruppare per progetto e modificare gli usi uno per uno. C'è un modo più semplice/automatico per fare questo?

+0

cosa dire di sostituzione rapida nel progetto corrente - sostituire il nome della classe X con Y? – wiero

risposta

4

Structural Search and Replace è il tuo amico qui. Si arriva a questo attraverso ReSharper | Find | Search with Pattern....

  • Definire un segnaposto di tipo X, denominarlo TX.
  • Fai il vostro modello di Ricerca $TX$
  • Specificare a "Cerca in" "Progetto"
  • Come verifica, effettuare la ricerca - si dovrebbe vedere tutti gli usi del X
  • Fare clic sul pulsante Sostituisci ginocchiera
  • Rendere il modello Sostituire il nome completo del Y
  • Fare clic su Sostituisci

ReSharper sarà sho con tutte le citazioni di X che si desidera sostituire: verificare che la casella di controllo nella parte superiore dell'albero sia selezionata, quindi fare clic su Sostituisci.

modificare

E 'infatti utilizzando un tipo segnaposto nel nostro modello Trova che garantiscono che solo i riferimenti al tipoX, piuttosto che qualsiasi altra cosa di nome X, vengono rinominati.

Se invece si preferisce finire con

using A.B.C; 

/* later */ 
Y obObject = ... 

piuttosto che

A.B.C.Y myObject 

ho che si può raggiungere questo obiettivo attraverso:

  1. In ReSharper | Options, Tools | Code Cleanup, definire un nuovo profilo che ha solo "Optimize" usando "direttive" "Controllato
  2. In ReSharper | Options, Languages | C# | Namespace Imports aggiungere A.B.C a" spazi dei nomi che dovrebbero sempre essere imported`
  3. Run ReSharper | Tools | Cleanup Code utilizzando il profilo appena definito
  4. Tidy up rimuovendo A.B.C dai namespace lista si è aggiunto a

anche se questo pulirà anche tutti gli altri using s, che potrebbero rendere il controllo della versione diff un po 'più grande di quanto si desideri.

+0

Presumo che il modello di ricerca assicuri che vengano sostituiti solo i riferimenti alla classe 'X', e non le occorrenze di' X' nei commenti o come nomi di proprietà? Inoltre, come follow-up, quale sarebbe il modo più semplice per sostituire i nomi completi e aggiungere le istruzioni 'using' corrette ai file rilevanti? – Bubblewrap

Problemi correlati