CLR был портирован на различные платформы, не все из которых равны. XBox 360 CLR, например, не имеет Reflection.Emit или даже всех операций IL, которые полный CLR делает . Следовательно, другой компилятор может выдавать коды IL, которые допустимы для полной версии CLR, но недопустимы для Compact CLR.
Другая проблема - доступность библиотек классов. Полный BCL включает в себя пространство имен Microsoft.VisualBasic , на которое автоматически ссылается компилятор VB.NET. Он содержит функции VB6 совместимости , функции My namespace , а также некоторые вспомогательные функции компилятора и обычно называется средой выполнения VB.NET.
Всякий раз, когда CLR переносится, некоторые сборки переносятся, а другие - нет. Для XBox Microsoft.VisualBasic не был портирован. Это означает, что вы не можете ссылаться на что-либо из этого пространства имен. Хотя довольно просто не ссылаться на совместимость или пространства имен My, службы компилятора могут быть вставлены в скомпилированный IL без явного вызова их.
В VB.NET 8 вы можете передать недокументированный и неподдерживаемый ключ -novbruntimeref в vbc.exe, чтобы он не ссылался на Microsoft.VisualBasic.dll. К сожалению, это иногда вызывает странные ошибки компилятора. В VB.NET 9 это стало документированным и поддерживаемым и переименованным в /vbruntime.
Третий случай - это надстройки и поддержка Visual Studio. Это зависит от отдельных пакетов, от того, поддерживают ли они шаблоны, генерацию кода и т. Д. Для каждого языка. Я полагаю, что некоторые сторонние производители выпустили шаблоны VB.NET для XNA, хотя официально не поддерживается .
Суть, я думаю, в том, что это сочетание технических проблем (порты CLR, доступность BCL, вывод IL компилятора) и поддержки (тестирование, финансирование и надстройки для других языков).