Почему система Imports не предоставляет доступ к пространству имен Windows в vbc.exe?
Я управляю приложением, которое позволяет пользователям автоматизировать задачи, написав собственный VB-код. Код пользователя компилируется с использованием VBCodeProvider и вызывается для запущенного экземпляра приложения. Мы занимаемся этим уже несколько лет, начиная с.NET 2.
Традиционно мы импортировали пространство имен System в настройках компилятора, чтобы пользователям не приходилось писать System. все время. Однако когда мы перешли на.NET 4, мы обнаружили, что такие операторы, как Windows.Forms.Form, больше не будут компилироваться. Ошибка была: "Тип" Windows.Forms.Form "не определен". Это странно, потому что другие пространства имен работают. IO.Stream и Reflection.Assembly не имеют ошибки без Системы в начале.
Я создал простой пример. Я поместил приведенный ниже код в файл. Затем я скомпилировал этот файл с помощью vbc.exe из каталогов.NET2 и.NET4. 2 версия работает нормально. Версия 4 не скомпилируется, если вы не закомментируете переменную f2.
Imports System
Public Class MyClassName
Public Shared Sub Main
'this works in v2 and v4
Dim f As New System.Windows.Forms.Form
f.ShowDialog
'this does not work in v4
Dim f2 As New Windows.Forms.Form
f2.ShowDialog
End Sub
End Class
Кто-нибудь знает, как заставить это скомпилировать в vbc.exe версии 4? И прежде чем вы скажете: "Просто скажите пользователям, что нужно набирать System.Windows.Forms", я согласен, что было бы здорово, если бы они это сделали, но пользователи делают то, что делают пользователи, и я должен решить это.
ОБНОВИТЬ:
Я обнаружил, что пространство имен Windows.Foundation.Diagnostics вызывает конфликт с сокращенным использованием Window.Forms. Есть ли способ скрыть это пространство имен от моей компиляции? Visual Studio 2010 не имеет такого же конфликта, поэтому он должен как-то обойти это.