2016-01-20 24 views
5

Abbiamo this announcement che .Net Core viene rinominato in 1.0 (confuso, ma buono, qualunque). In esso Hanselman afferma.Net Core genera lo stesso IL di standard .Net?

It doesn't yet support VB or F#. 

Che mi fa pensare che mi manchi qualcosa. La mia logica funziona come segue.

Prendi due semplici semplici app Hello World una in C#, l'altra in VB. Supponendo di averlo mantenuto semplice, quando si compila con il framework msbuild/.Net standard si dovrebbe ottenere IL identico. Sono a conoscenza del fatto che è possibile ottenere. NET core per eseguire la stessa DLL poiché è tutto IL a quel livello. Allora perché dire che non supporta VB? È che non lo supporta al di là di situazioni semplici (in cui probabilmente faresti riferimento a materiale specifico per vb)? Oppure l'effettivo IL generato durante la compilazione di .Net Framework rispetto a .Net Core è diverso e non esiste ancora un compilatore VB/F #?

+0

probabilmente perché quelle lingue hanno le dll di riferimento specifiche della lingua (ad esempio Microsoft.VisualBasic.dll) che hanno i propri riferimenti che non supportano il core. – Jeff

+0

@Jeff beh sì, ma l'ho trattato nella domanda: non * devi * usare 'Microsoft.VisualBasic.dll' in un'app vb (e puoi usarlo bene anche in uno C#). Quindi è che questa DLL non è stata spostata su .Net Core ma l'IL è identico e non è del tutto corretto che vb-wont-work, o l'effettiva IL sia diversa. Cos'è questo? –

+5

Esiste solo un tipo di IL, la versione .NET Core non è diversa. Il presupposto che Microsoft.VisualBasic.dll non sia necessario non è accurato, il compilatore genera automaticamente il codice che lo utilizza. Cose di base, come il confronto delle stringhe che deve osservare Option Compare. Più o meno lo stesso per F # e FSharp.Core.dll –

risposta

2

Sì, genera lo stesso IL

(non ho resistito a rispondere così semplice)

Tuttavia, per la parte VB: Per quanto riguarda il supporto di VB: Running on .NET core richiede un compilatore (implementato in Roslyn), un comando CLI dotnet-compile-vb (non implementato ... per F # la comunità lo ha già consegnato) e una versione supportata di Microsoft.VisualBasic (implementata in corefx). Immagino che il punto di supporto di VisualBasic sia lo stesso di ad es. ASP.NET SignalR. Il codice è al 95% lì, funziona, ma non è ufficialmente testato e supportato. È una questione di tempi e non di tecnologie.

IMHO: Considerando che l'assembly Microsoft.VisualBasic è lì e l'IL è lo stesso, in teoria potrebbe anche eseguire un assembly VB compilato purché il compilatore usasse la piattaforma Core basata su System.Runtime.

Problemi correlati