【发布时间】: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