我管理一个允许用户通过编写自己的 VB 代码来自动执行任务的应用程序。用户代码使用VBCodeProvider编译并针对应用程序的运行实例调用。从 .NET 2 开始,我们已经这样做了几年。
传统上,我们在编译器设置中导入了System命名空间,这样用户就不必编写System. 每时每刻。然而,当我们使用 .NET 4 时,我们发现像Windows.Forms.Form这样的语句将不再编译。错误是“未定义类型'Windows.Forms.Form'。” 这很奇怪,因为其他命名空间也有效。IO.Stream和Reflection.Assembly没有System开头就没有错误。
我创建了一个简单的示例。我已将以下代码放入文件中。然后我用.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 没有相同的冲突,因此它必须以某种方式解决它。