2013-03-14 13 views
6

Abbiamo una soluzione con oltre 25 progetti, ognuno con il proprio AssemblyInfo Sto cercando di incrementare tutti i numeri dell'assieme per aumentare una versione principale per la nostra prossima versione.Trova e sostituisci l'assembly con regex in visual studio

Le mie capacità regex sono minime ma essenzialmente vorrei trovare:

<Assembly: AssemblyVersion("x.x.x.x")> 

Dove x in termini regex sarà \d/un numero. Guardando here ho pensato che avrei potuto utilizzare:

{AssemblyVersion("[\d].[\d].[\d].[\d]")} 

che non ha funzionato, non gradisce le parentesi aperte. La mia domanda è essenzialmente suddivisa in due fasi:

  1. Quale stringa regex verrà utilizzata per trovare l'esempio?
  2. È possibile sostituire la prima cifra con la cifra + 1 usando regex? (Sospetto di essere un po 'ottimista) in tal caso quale sarà la stringa regex in questa situazione?

Questo è nel controllo del codice sorgente, quindi non vorrei modificare direttamente i file.

Grazie in anticipo.

+0

Cosa intendi con un numero '\ d/a'? –

+0

Non sono sicuro che questo sarebbe d'aiuto, ma potreste considerare la versione di 'Assembly Version' come un indirizzo IP. Sono spesso usati per trovare e modificare frequentemente. Uno di questi RegEx potrebbe funzionare. – Greg

+0

@RyanGates In termini di espressioni regolari è '\ d' per quanto ne so. Se la mia consapevolezza è un po 'fuori, è un numero! : P – LukeHennerley

risposta

3

Nota: questa è la ricerca e la sostituzione regolare di Visual Studio.

Non penso che sia possibile aggiungerne uno mentre si esegue una regex sostitutiva. Tuttavia, è possibile sostituire un numero letterale. Ad esempio, è possibile utilizzare una regex che sostituisce la prima cifra 1 con un 99:

AssemblyVersion("1.0.2121.0") ->AssemblyVersion("99.0.2121.0")

Ecco l'espressione regolare che ho usato per il Visual Studio di ricerca e sostituzione:

Search Regex: AssemblyVersion[(]["]([0-9]+)([.][0-9]+[.][0-9]+[.][0-9]+)["][)] 
Replace Regex: AssemblyVersion("99${2}") 

L'espressione regolare di ricerca esegue il escape di tutti i caratteri speciali (.") racchiudendoli tra parentesi quadre. Quindi utilizza la parentesi per dividere il numero di versione in due gruppi. Il primo gruppo è il primo gruppo di cifre. Il secondo gruppo è gli ultimi tre gruppi di cifre.

Ad esempio, AssemblyVersion("1.0.2121.0") è raggruppato in questo modo (utilizzando le parentesi graffe per i raggruppamenti): AssemblyVersion("{1}{.0.2121.0}"). Quindi il gruppo 1 è 1 e il gruppo 2 è .0.2121.0.

La regex di sostituzione AssemblyVersion("99${2}") utilizza un letterale e il gruppo 2 dalla regex di ricerca per creare la stringa di sostituzione. Il ${2} significa utilizzare il testo dal gruppo 2. Il resto della stringa è letterale.

+0

Questo sembra perfetto :) Sto passando da questo manuale per ottenere un build automatico per incrementare i numeri di versione, quindi non devo farlo, ma funzionerà per me. Grazie. – LukeHennerley

0

Se si utilizza C# per trovare il testo, penso che questa sia la regex di cui avrete bisogno: l'ho racchiusa in una stringa letterale e sfuggita alle virgolette.

Regex regex = new Regex(@"<Assembly: AssemblyVersion\(""\d+\.\d+\.\d+\.\d+""\)>"); 

Se si vuole raccogliere gli elementi per manipolare la stringa in una nuova stringa quindi aggiungere alcune parentesi in questo modo:

Regex regex = new Regex(@"<Assembly: AssemblyVersion\(""(\d+)\.(\d+)\.(\d+)\.(\d+)""\)>"); 

È quindi possibile accedere ai numeri individualmente per creare una nuova stringa utilizzando l'espressione regolare gruppi:

Match match = regex.Match(your_search_text); 
if (match.Success) 
{ 
    Console.WriteLine(match.Groups[1].Value); 
    Console.WriteLine(match.Groups[2].Value); 
    Console.WriteLine(match.Groups[3].Value); 
    Console.WriteLine(match.Groups[4].Value); 
} 
+0

Questo lavoro potrebbe utilizzare lo studio visivo trovare e sostituire? – LukeHennerley

+0

Penso che sia un po 'oltre trovare e sostituire. Quando si tratta di cercare molti file per trovare uno schema di testo, accendo Powershell perché questo è davvero il compito ideale per una riga di comando. –

Problemi correlati