Почему система 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 не имеет такого же конфликта, поэтому он должен как-то обойти это.

0 ответов

Другие вопросы по тегам