C#编译器和Windows.Forms

C#编译器和Windows.Forms,c#,.net,winforms,compiler-construction,codedom,C#,.net,Winforms,Compiler Construction,Codedom,我刚刚创建了一个小应用程序,它使用C#编译器以编程方式编译代码,并且工作得非常出色。但是,我需要它做的一件事是编译Windows.Forms代码。比如,我可以用它创建一个控制台应用程序,但我不能创建一个基于GUI的表单。以下是让我开始学习的链接: 有人能帮忙吗 谢谢:) 更新 上面的代码是我在应用程序中键入的代码。当我试图编译这段代码时,我的应用程序会给我大量错误,并且不会生成exe(显然)。但是,我的应用程序总是成功地编译直接控制台应用程序…您只需添加系统、系统.Drawing和系统.Win

我刚刚创建了一个小应用程序,它使用C#编译器以编程方式编译代码,并且工作得非常出色。但是,我需要它做的一件事是编译Windows.Forms代码。比如,我可以用它创建一个控制台应用程序,但我不能创建一个基于GUI的表单。以下是让我开始学习的链接:

有人能帮忙吗

谢谢:)

更新


上面的代码是我在应用程序中键入的代码。当我试图编译这段代码时,我的应用程序会给我大量错误,并且不会生成exe(显然)。但是,我的应用程序总是成功地编译直接控制台应用程序…

您只需添加
系统
系统.Drawing
系统.Windows.Forms
程序集作为参考编译时

您只需添加
系统
System.Drawing
System.Windows.Forms
程序集作为参考编译时

需要同时包含Form1.cs和Form1.Designer.cs才能完全编译。当然,您还必须包含对表单的引用以及任何其他所需的命名空间。

您需要同时包含Form1.cs和Form1.Designer.cs才能完全编译它。当然,您还必须包括对表单的引用以及任何其他所需的名称空间。

您遇到了与我相同的问题

您所需要做的就是告诉编译器将程序编译为winexe。要做到这一点,只需将其添加到编译器参数:

CompilerParams.CompilerOptions = "/target:winexe";
但还要注意,这将使用默认图标(看起来很糟糕!)编译它,因此您需要添加额外的参数:

if (File.Exists(iconPath))
    CompilerParams.CompilerOptions = "/target:winexe" + " " + "/win32icon:" + "\"" + iConPath + "\"";
else
    CompilerParams.CompilerOptions = "/target:winexe";

通过这种方式,在尝试将图标放入之前,它将检查图标是否存在,从而为您省去一点我不得不经历的麻烦….

您遇到的问题与我遇到的问题相同

您所需要做的就是告诉编译器将程序编译为winexe。要做到这一点,只需将其添加到编译器参数:

CompilerParams.CompilerOptions = "/target:winexe";
但还要注意,这将使用默认图标(看起来很糟糕!)编译它,因此您需要添加额外的参数:

if (File.Exists(iconPath))
    CompilerParams.CompilerOptions = "/target:winexe" + " " + "/win32icon:" + "\"" + iConPath + "\"";
else
    CompilerParams.CompilerOptions = "/target:winexe";


通过这种方式,在尝试将图标放入之前,它将检查图标是否存在,以避免我不得不经历的一点麻烦….

什么部分不起作用?好的,当我在visual studio中创建一个新表单,然后复制Form1.cs文件中的所有代码并将其粘贴到我的应用程序中时,我会遇到错误,很多人说“命名空间'System'中不存在类型或命名空间'ComponentModel'(是否缺少程序集引用?),命名空间'System'中不存在类型或命名空间'Windows'等。每个using指令都有一个错误。如果昨晚出现上述评论有点粗鲁,我深表歉意,这不是我的意图什么部分不起作用?好吧,当我在visual studio中创建一个新表单,然后复制Form1.cs文件中的所有代码并将其粘贴到我的应用程序中时,我会收到错误,其中很多错误都说“名称空间“系统”中不存在类型或名称空间“ComponentModel”(是否缺少程序集引用?),并且名称空间“系统”中不存在类型或名称空间“Windows”等。每个using指令都有一个错误。如果昨晚上面的评论有点粗鲁,我表示歉意,这不是我的本意。这时这些错误会弹出。请看我的问题,我刚刚更新了它,以准确显示我正在键入的内容。我是如何做到的添加引用?需要将它们添加到
CompilerParameters
ohhhh的
referencedAssemblys
属性中,那样的话……我以为您在谈论其他引用(即文件顶部的“使用System.Drawing”)…kk现在尝试:)好的,我们现在有进展了:)。我刚刚做了,并尝试编译。现在它只有2个错误。“元数据文件“System”找不到”和“Metadata file”System.Windows.Forms”找不到。这意味着什么?在我刚刚添加“.dll”之前,我从未听说过C中的元数据文件“到引用的程序集的末尾。现在只有一个错误:“InitializeComponent在当前上下文中不存在。”。Initializecomponent是否需要某种类型的其他引用。。。是的。这时这些错误就会出现。请看我的问题,我刚刚更新了它,以准确显示我正在键入的内容。您是如何添加引用的?您需要将它们添加到
CompilerParameters
ohhhh的
referencedAssemblys
属性中,这样。。。我以为你在谈论其他的(例如,文件顶部的“使用System.Drawing”)。。kk现在试试:)好了,我们现在有进展了:)。我就这么做了,试着编译。现在它只有两个错误。“找不到元数据文件‘System’”和“找不到元数据文件‘System.Windows.Forms’”。这是什么意思?在我刚刚将“.dll”添加到引用程序集的末尾之前,我从未听说过C语言中的元数据文件。现在只有一个错误:“InitializeComponent在当前上下文中不存在。”。Initializecomponent是否需要某种类型的其他引用。。。你能建议我怎么做吗?MSDN,甚至那篇文章(在我的问题中)都没有说明如何做到这一点。它甚至没有说明这一点。调用CompileAseMblyFromFile,并传递两个文件名的名称:
provider.CompileAseMblyFromFile(选项“Form1.cs”、“Form1.Designer.cs”)谢谢:)但是,现在它说:SampleCompiler.exe不包含适合入口点的静态“Main”方法。。。我以前从未在Form1.cs文件中见过Main方法。。。什么?你当然需要为你的程序指定一个入口点。(在一个新的表单项目中,通常在program.cs中)哦,天哪,我觉得自己太傻了。我完全忘记了program.cs。对不起,你能建议我怎么做吗?MSDN,甚至那篇文章(在我的问题中)都没有说明如何做到这一点。它甚至没有说任何关于这一点的话。调用compileasemblyfromfile,然后