2013-06-11 17 views
7

Poiché Microsoft Documentation dichiara Runtime Hosts che .NET ha più di un Runtime Host per supportare ed eseguire il codice della nostra applicazione, la mia domanda è: Come posso sapere quali Host di Runtime degli host di Microsoft Runtime, ospita il mio codice.Come posso sapere quale Runtime Host è correntemente in esecuzione il mio codice?

Sto utilizzando il linguaggio C# per sviluppare la libreria di classi DLL che può essere utilizzata e/o ospitata da vari host Runtime, quindi ho bisogno di sapere quale host Runtime ora ospita il mio codice per soddisfare le condizioni specificate.

+0

Si sta implicando che il codice "condiviso" del runtime DLL potrebbe utilizzare una versione più recente di .net Runtime rispetto al codice che lo chiama? La lettura/scrittura nel file * .config è la tua unica preoccupazione? –

risposta

0

L'API di hosting .NET Framework 4 fornisce la funzione CLRCreateInstance, che può restituire l'interfaccia ICLRMetaHost. È quindi possibile chiamare il metodo GetRuntime su questa interfaccia per ottenere un'interfaccia ICLRRuntimeInfo specifica, data una particolare versione CLR. Questa procedura sostituisce il metodo CorBindToRuntimeEx utilizzato dall'API di hosting di .NET Framework 2.0.

L'API di hosting di .NET Framework versione 2.0 fornisce la funzione CorBindToRuntimeEx per inizializzare il runtime. È possibile scegliere quale versione del runtime caricare, ma un processo può ospitare solo una versione. Se viene caricata la versione 2.0, 3.0 o 3.5, la funzione restituisce l'interfaccia ICLRRuntimeHost, che viene utilizzata per avviare il runtime ed eseguire il codice gestito.

Fonte: http://msdn.microsoft.com/en-us/library/dd380850.aspx

+0

Come posso chiamare queste funzioni e c'è un altro approccio più semplice? –

+0

Dopo aver scavato a fondo in MSDN e google ho scoperto che le interfacce fornite da MSCorEE.dll non includono un metodo per definire il nome host o la versione su CLR, le interfacce forniscono solo funzionalità di hosting e gestione del CLR, Una pace di le informazioni che puoi conoscere usando queste interfacce è la versione del CLR che esegue il tuo codice NON l'host che esegue lo stesso CLR –

+0

Fare riferimento a http://msdn.microsoft.com/en-us/library/a51xd4ze.aspx per ricontrollare lo –

1

In realtà c'è un modo abbastanza semplice per determinare la versione runtime corrente del CLR. In caso affermativo, Environment.Version restituirà una versione diversa se il codice è correntemente in esecuzione in un CLR diverso a causa dell'esecuzione di SxS (Side-by-Side).

Per vedere come funziona in pratica in un'applicazione che può avere due runtime allo stesso tempo, controlla this article on Demonstrating Side by Side execution.

if(Environment.Version.StartsWith("2.0")) 
    System.Console.WriteLine("Inside .NET CLR 2.0"); 
else if(Environment.Version.StartsWith("4.0")) 
    System.Console.WriteLine("Inside .NET CLR 4.0"); 
else 
    System.Console.WriteLine("Unknown .NET version"); 

Si noti che il caricatore .NET 2.0 caricherà la più recente CLR di .NET 2.0 disponibili, che sarà .NET 3.5 nella maggior parte dei casi. Non è possibile eseguire versioni diverse di .NET 2.0 affiancate in un unico processo. Né è possibile to run .NET 1.0 or .NET 1.1 side by side with .NET 2.0 in .NET 4.0 (è possibile però eseguire solo 1.0 o 1.1 affiancati in .NET 4.0).

Problemi correlati