2013-05-28 11 views
6

Ho un'interfaccia, chiamiamola ILocateLogFile, con un'implementazione standard per i server di sviluppo/beta/produzione e una che funziona solo nell'ambiente di sviluppo locale. Non riesco a pensare ad un bel modo pulito per decidere (preferibilmente al momento della compilazione, ma il runtime andrebbe bene) se sto lavorando localmente o su un server. Questa è un'applicazione WCF ospitata su IIS, se questo è importante.Come sapere se il codice è in esecuzione localmente da Visual Studio/Cassini

Il migliore che è venuta in mente è quello di utilizzare un simbolo compilatore, qualcosa di simile:

ILocateLogFile locateLogFile; 
#if DEBUG 
    locateLogFile = new DevSandboxLogFileLocator(); 
#else 
    locateLogFile = new LogFileLocator(); 
#endif 

Il problema è, compilare i simboli vengono fissati dalla costruzione, che io non controllo, e io voglio essere sicuro. Non c'è un modo automatico per verificare la presenza di Visual Studio? O almeno per controllare Cassini piuttosto che IIS?

+0

Ho visto questo risolto prima controllando per la variabile nome del server in un'istruzione if altro. – RandomUs1r

+1

Qualsiasi motivo per non utilizzare i file .config per configurare la registrazione? (probabilmente hai già un .config diverso per ogni ambiente, quindi potrebbe essere banale aggiungere anche la registrazione). –

+0

@ RandomUs1r è un buon suggerimento, ma non posso usare 'System.Web.HttpContext' perché il mio servizio WCF non sta usando la compatibilità ASP.Net ... – McGarnagle

risposta

8

Due modi che ho fatto questo 1 è possibile controllare il nome del processo

bool isRunningInIisExpress = Process.GetCurrentProcess() 
           .ProcessName.ToLower().Contains("iisexpress"); 

o aggiornare il file di configurazione con una impostazione

<appSettings> 
    <add key="ApplicationEnvironment" value="LOCAL_DEV" /> 
</appSettings> 

personalizzato che si aggiorna appositamente per ogni ambiente e averti domanda di applicazione per

Non sono sicuro se c'è un modo per determinare questo al momento della compilazione, oltre ad avere una configurazione di build speciale che è per ogni ronment e mettendo un'abitudine PRAGMA per ciascuna di queste build. Personalmente penso che non sia elegante, ma potrebbe anche funzionare.

+0

Grazie, penso che la prima opzione sia esattamente quello che sto cercando - sebbene, il mio nome di processo sembra essere "WebDev.WebServer40" piuttosto che "iisexpress". – McGarnagle

+0

Questo ha senso se si utilizza il build nel server di sviluppo. Si consiglia di pensare a passare a IIS Express. Ho trovato che è molto più robusto ed è integrato in VS 2012/2010 SP1. – jstromwick

-2

Ecco il codice che ho usato

If Debugger.IsAttached Then 
' Since there is a debugger attached, 
' assume we are running from the IDE 
Else 
' Assume we aren't running from the IDE 
End If 
Problemi correlati