Domanda

Qualcosa di cui non devo chiarire, capisco che ci sono differenze tra C # e VB.NET (principalmente nell'uso dei puntatori) ma perché se entrambi hanno un CLR comune, XNA (ad esempio) funziona solo con C # e non VB.NET, o è che i componenti aggiuntivi di Visual Studio sono stati indirizzati a C # piuttosto che a VB.Net, e infatti le estensioni del linguaggio funzionano in entrambi

Scusa se è una domanda ovvia, ho pensato di fare

È stato utile?

Soluzione

Il CLR è stato portato su varie piattaforme, non tutte uguali. XBox 360 CLR, ad esempio, non ha Reflection.Emit o even tutte le IL accettano il CLR completo . Pertanto, un compilatore diverso può emettere codici IL che sono legali sul CLR completo, ma illegali sul CLR compatto.

L'altro problema è la disponibilità delle librerie di classi. Il BCL completo include lo spazio dei nomi Microsoft.VisualBasic , che è a cui fa automaticamente riferimento il compilatore VB.NET. Questo contiene Compatibilità VB6 , le < a href = "http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.myservices.aspx" rel = "nofollow noreferrer"> Il mio spazio dei nomi , così come alcune funzioni di supporto del compilatore , ed è comunemente indicato come VB. Runtime NET.

Ogni volta che il CLR viene portato, alcuni assembly vengono portati - e altri no. Per l'XBox, Microsoft.VisualBasic non è stato portato. Ciò significa che non puoi fare riferimento a nulla di quello spazio dei nomi. Mentre è abbastanza facile non fare riferimento alla compatibilità o ai miei spazi dei nomi, i servizi del compilatore possono essere inseriti nell'IL compilato senza che tu li chiami esplicitamente.

In VB.NET 8, potresti passare un non documentato e non supportato -novbruntimeref passa a vbc.exe per evitare che faccia riferimento a Microsoft.VisualBasic.dll. Sfortunatamente, questo a volte causerebbe strani errori del compilatore. In VB.NET 9, è diventato documentato e supportato e rinominato in / vbruntime .

Il terzo caso è rappresentato dai componenti aggiuntivi e dal supporto di Visual Studio. Questo dipende dai singoli pacchetti, se supportano modelli, code gen, ecc. Per ogni lingua. Credo che alcune terze parti abbiano rilasciato modelli VB.NET per XNA, sebbene è non ufficialmente supportato .

La linea di fondo, immagino, è che è un mix di preoccupazioni tecniche (porte CLR, disponibilità BCL, output IL del compilatore) e supporto (test, finanziamenti e componenti aggiuntivi per altre lingue).

Altri suggerimenti

È il set di strumenti che definisce il supporto linguistico. XNA, ad esempio, ha semplicemente svolto tutto il proprio lavoro con C # e fornito supporto solo per esso. Puoi ancora scrivere un'app in VB.NET e compilarla manualmente dalla riga di comando. Fino a quando la tua app non si è compilata in nessun IL illegale (codici opici che XNA non supporta) continuerà a funzionare. Il problema principale sono le risorse: non hanno la forza lavoro per eseguire lo sviluppo e il test completi di tutte le lingue, quindi ne hanno scelto uno.

Da tutti gli account, VB.NET e C # sono equivalenti a 99.9999 in termini di CLR. Ma ci sono alcune lievi differenze che potrebbero morderti. Inoltre ricordo di aver letto su alcuni blog di Microsoft che ci sono alcune cose che il CLR può fare che non sono (ancora) programmabili da VB.NET o C # e devono essere fatte da IL. Davvero interessante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top