首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

代码动态编译的一些有关问题

2012-12-26 
代码动态编译的一些问题各位大虾,小弟最近要使用动态编译生成exe程序,可是发现生成的exe是控制台程序而不

代码动态编译的一些问题
各位大虾,小弟最近要使用动态编译生成exe程序,可是发现生成的exe是控制台程序而不是windows窗体应用程序(有用户交互界面的),这样有些用户交互功能无法实现(比如说显示一个窗体等),不知道哪里可以设置生成的应用程序类型的?



    Public Shared Sub CreateExe(ByVal exeName As String, ByVal Code As String)
        '创建一个编译器.  
        Dim Comp As VBCodeProvider = New VBCodeProvider()
         Dim Parms As CompilerParameters = New CompilerParameters
        Parms.GenerateExecutable = True   '创建exe文件而不是dll
         Parms.OutputAssembly = exeName        '产生的应用程序名
         Parms.TreatWarningsAsErrors = False'编译器将不会将警告视为错误。
        '添加你想引用的所有集合。
         Parms.ReferencedAssemblies.Add("System.Windows.Forms.dll")
        Parms.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
        Parms.ReferencedAssemblies.Add("System.dll")
        Parms.ReferencedAssemblies.Add("mscorlib.dll")
        '定义你要运行的代码。
        Dim Executable As CompilerResults = Comp.CompileAssemblyFromSource(Parms, Code)
        '如果再有任何错误消息显示。
        If Executable.Errors.HasErrors Then
            For Each Item As CompilerError In Executable.Errors()
                MessageBox.Show(Item.ErrorText)
            Next
        Else '如果再没有任何错误信息,启动可执行文件。
            Process.Start(exeName)
        End If
    End Sub



这样生成的是控制台程序,如果在Code里面dim frm as new form,dim timer1 as new timer等,用不了。
请问该如何解决?
[最优解释]
这和是否是Console没有关系,关键看你是否用 Application.Run(new Form1()) 启动了窗体。
[其他解释]
引用:
这和是否是Console没有关系,关键看你是否用 Application.Run(new Form1()) 启动了窗体。


如果我Code字符串里的代码如下,那么 Application.Run该用在哪里呢?


Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Imports System
Imports System.Diagnostics

Public Class C_Text

    Private Shared  Timer As New Timer
    Private Shared  TimerInterval As Integer = 5000 

    Public Shared Sub Main()
        AddHandler Timer.Tick, AddressOf Timer_Tick
        Timer.Interval = TimerInterval
        Timer.Start()


    End Sub

    Private Shared Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
        '这里是timer的tick事件,具体代码就不写了
    End Sub

End Class



能不能简单的写一下代码?十分感谢!

[其他解释]
Main 里
[其他解释]
fangxinggood您好,我今天按您的提示修改了一下Code代码,如下,可是还是不行(还是黑框一闪就没了)。 

Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Namespace Text

   Public Class C_Text

       Public Shared Sub Main()
           Application.Run(New MainFrm)
       End Sub

   End Class

   Public Class MainFrm

        Inherits Windows.Forms.Form

        Private Shared Button1 As Button
        
        Public Sub New()
            Button1.Text = "Text"
            Button1.Top = 100 : Button1.Left = 100
            AddHandler Button1.Click, AddressOf Button1_Click
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            MsgBox("Text")
        End Sub

    End Class
    
End Namespace


这样应该没错了吧?可是窗体还是无法显示,请问哪里出错了?

热点排行