【问题标题】:CodeDom compile error 'Forms' is not a member of 'Windows' in Windows 8.1CodeDom 编译错误“表单”不是 Windows 8.1 中“Windows”的成员
【发布时间】:2026-01-27 06:25:02
【问题描述】:

我正在使用 CodeDom 创建 InMemory exe。这适用于 Windows 8 及更低版本。如果我删除表单声明,编译的代码在 Windows 8.1 中有效,但我不想这样做。有任何想法吗? Windows 7 - 一切正常, Windows 8 - 一切正常, Windows 8.1 - 无需声明表单即可工作。

参考框架

        provOptions.Add("CompilerVersion", "v4.0")

CodeDom 引用的程序集:

        vbParams.ReferencedAssemblies.Add("mscorlib.dll")
        vbParams.ReferencedAssemblies.Add("System.dll")
        vbParams.ReferencedAssemblies.Add("System.Windows.Forms.dll")
        vbParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
        vbParams.ReferencedAssemblies.Add("System.Data.dll")
        vbParams.ReferencedAssemblies.Add("System.Xml.dll")
        vbParams.ReferencedAssemblies.Add("System.Data.Linq.dll")
        vbParams.ReferencedAssemblies.Add("System.Core.dll")
        vbParams.ReferencedAssemblies.Add("System.Drawing.dll")
        vbParams.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll")

编译的代码(部分):

        Imports System
        Imports System.Data
        Imports System.Windows.Forms
        Imports System.Math
        Imports Microsoft.VisualBasic
        Imports System.Collections.Generic
        Imports System.Data.DataRow
        Imports System.Linq
        Imports System.Drawing
        Imports System.Xml
        Imports System.Collections

        Namespace Evaluator

            Public Module GlobalVariables

                Public DialogBox As System.Windows.Forms.Form **(this crashes in windows 8.1)**

            End Module

            more code...

            Public Class Evaluator

                'EDITED 1/16/13 - Invoking this function will show the message
                'box which is part of the Forms namespace

                Public Function TestFunction() As Object
                    MessageBox.Show("Lorem ipsum dolor sit amet.")
                End Function

            End Class

        End Namespace

【问题讨论】:

  • 没错...Forms 不是 Windows 8.1 中 Windows 的成员。我自己说得再好不过了……
  • 让我感到奇怪的是,我可以使用 Windows.Forms.Form 创建一个应用程序,它在 8.1 上运行良好,但不能通过使用 CodeDom 提供程序的 InMemory .exe。使用 codedom 时它是不同命名空间的成员吗?
  • 另外,如果我调用带有消息框的函数,它确实可以在 Windows 8.1 的 InMemory exe 中工作。那么为什么这行得通而声明一个表单却行不通呢?

标签: vb.net windows visual-studio windows-8.1 codedom


【解决方案1】:

正如 HighCore 在评论中所说的(没错……Forms 在 Windows 8.1 中不是 Windows 的成员。我自己说得再好不过了……-)。

所以我所做的是将所有控件放在面板上(在 In-Memory .exe 中),然后将其传递回调用应用程序并在那里显示面板。效果很好。

【讨论】: