2009-06-24 19 views
7

VS ha una variabile di ambiente per il percorso della soluzione corrente?Variabile ambiente percorso soluzione Visual Studio

Ad esempio, esiste "% PathToWebRoot%" che in genere è impostato nella directory "WebSites" nella directory del progetto VS. Il valore di esso può essere modificato in qualsiasi numero di modi. Mi chiedo se c'è una variabile che cambia ogni volta che carichi una soluzione per puntare alla sua radice.

Sto creando test unitari che possono essere eseguiti su macchine diverse e una delle direzioni che devi impostare prima che il metodo sia AspNetDevelopmentServerHost. Si raccomanda di non codificarli con difficoltà, naturalmente, ma la variabile di ambiente consigliata non è necessariamente dove sarà il tuo sito e in questo caso non lo è.

risposta

13

VS ha un sacco di variabili Macro che funzionano da all'interno di VS. Quello che ti dà il percorso completo per la soluzione è chiamato $(SolutionDir). Tuttavia, mentre questo funziona dagli eventi Pre-e Post-build (e, AFAIK, nel file MSBuild della soluzione), questa non è una variabile d'ambiente. Se ci pensi, non puoi avere una variabile di ambiente (globale) che punta a "il percorso verso la soluzione corrente", poiché potresti avere più di un'istanza di VS aperto.

A seconda del framework di test dell'unità, è possibile chiedere spesso al contesto di esecuzione di ottenere la directory corrente. Ciò potrebbe non fornire il percorso della soluzione, sebbene ...

+0

Vero, anche se l'istanza corrente di VS cambiato per abbinare è impostazioni, che potrebbero rovinare qualsiasi altra istanza. Proverò a $ (SolutionPath) una prova, i test unitari vengono eseguiti da VS, quindi potrebbe essere ciò di cui ho bisogno. – Otis

+0

Ha funzionato come un incantesimo, grazie. Non supponete di sapere se ce n'è uno per capire la porta corrente del server di sviluppo? – Otis

+0

Il modo in cui di solito trovo i nomi di queste macro è aprendo le proprietà del progetto e andando alla scheda Eventi di creazione. Se lo fai e fai clic su uno dei pulsanti Modifica, otterrai una finestra di dialogo con (tra le altre cose) un pulsante Macro. Facendo clic su questo pulsante ti verrà fornito un elenco di tutte le macro variabili disponibili per il tuo progetto.Non ho un progetto web a portata di mano, quindi non posso cercarlo, ma certamente non c'è nessun numero di porta nella libreria di classi che sto attualmente ispezionando ... –

5

Visual Studio espone una variabile di ambiente per il percorso della soluzione - si chiama SolutionPath. Ecco come si presenta:

SolutionPath=D:\Team\MyProject\main-branch\MyProject.sln

È importante sottolineare che è possibile utilizzarlo in qualsiasi processo generato da Visual Studio - per esempio, il lancio di script batch dalla vostra soluzione (è così che può essere diverso tra le diverse istanze di Visual Studio).

Se si configura Visual Studio per avviare i file .bat facendo doppio clic su di essi seguendo this guide, la variabile di ambiente sarà disponibile nel file batch.

Nel mio caso particolare, avevo bisogno di arrivare a una directory all'interno della mia soluzione e avevo alcuni rami di codice tutti allo stesso livello. Ma il mio script batch era ad un livello più alto nell'albero dei sorgenti e non aveva un modo semplice per determinare il ramo 'corrente'. Ad esempio, questa è stata la mia struttura:

D:\Team\MyProject\ 
    L-- Build 
     L-- MyBatchScript.bat 
    L-- main-branch 
     |-- MyProject.sln 
     L-- important-folder 
    L-- dev-branch 
     |-- MyProject.sln 
     L-- important-folder 

ho fatto riferimento MyBatchScript.bat come un elemento di soluzione in ogni soluzione così ho potuto lanciarlo con un doppio clic su di esso.

Per ottenere la cartella della soluzione, piuttosto che il percorso del file di soluzione, ho usato un po 'di DOS magia script batch:

FOR %%d IN (%SolutionPath%) DO SET SolutionFolder=%%~dpd 
REM Now I can run a tool with the correct folder 
mycustomtool.exe %SolutionFolder%important-folder 
Problemi correlati