为什么Imports System不允许访问vbc.exe中的Windows命名空间?

时间:2016-11-22 16:37:08

标签: vb.net codedom vbc vbcodeprovider

我管理一个允许用户通过编写自己的VB代码来自动执行任务的应用程序。用户代码使用 VBCodeProvider 进行编译,并针对正在运行的应用程序实例进行调用。从.NET 2开始,我们已经做了几年了。

传统上,我们在编译器设置中导入了 System 命名空间,因此用户无需一直编写 System。。但是,当我们使用.NET 4时,我们发现像 Windows.Forms.Form 这样的语句将不再编译。错误是“类型'Windows.Forms.Form'未定义。”这很奇怪,因为其他名称空间有效。 IO.Stream Reflection.Assembly 在开头没有系统时没有错误。

我创建了一个简单的例子。我把下面的代码放到一个文件中。然后我从.NET2和.NET4目录中使用 vbc.exe 编译了此文件。 2版本工作正常。除非您注释掉变量 f2

,否则4版本将无法编译
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 个答案:

没有答案