使用 csc.exe 编译 Windows 窗体应用程序
Posted
技术标签:
【中文标题】使用 csc.exe 编译 Windows 窗体应用程序【英文标题】:Compile a Windows Forms application using csc.exe 【发布时间】:2017-02-04 09:57:28 【问题描述】:Erik Brown 在他的书中写了以下代码 并从命令行编译它:
csc MyForm.cs
[assembly: System.Reflection.AssemblyVersion("1.1")]
namespace MyNamespace
public class MyForm : System.Windows.Forms.Form
public MyForm()
this.Text = "Hello Form";
public static void Main()
System.Windows.Forms.Application.Run(new MyForm());
我想添加另一个表单并从第一个调用它。
我需要项目文件吗?汇编文件?我不明白构建过程。您能否向我解释一下最基本的内容:我如何告诉编译器构建一个包含两种形式的应用程序?
【问题讨论】:
这本书试图教给你的东西并不那么明显。但是这个代码在刑事上是错误的。使用 Visual Studio 项目模板来正确处理它。再买一本书。 @hans:请不要评判 99% 专注于视觉工作室的书,并举一个例子……满足我的独特需求。 嗯,我有权评判。一本教人非常糟糕的编程习惯的书不是一本好书。你的 UI 看起来像是来自上个世纪,这很容易看出。但是你看不到的是,当你继续前进时,你会遇到非常令人讨厌的无法诊断的失败。这里也没有人能够帮助你,他们不会知道这本书告诉你做错了。不要这样做。 【参考方案1】:第一种形式(form1.cs):
public class MyForm : System.Windows.Forms.Form
public MyForm()
this.Text = "Hello Form";
this.Click += Form_Click;
public static void Main()
System.Windows.Forms.Application.Run(new MyForm());
private void Form_Click(object sender, System.EventArgs e)
MyForm2 form2 = new MyForm2();
form2.ShowDialog();
第二种形式(form2.cs):
public class MyForm2 : System.Windows.Forms.Form
public MyForm2()
this.Text = "Hello Form 2";
现在从命令行,找到保存这些 .cs 文件的位置,然后运行:
csc form1.cs form2.cs
它将创建一个 EXE 文件。运行它并在表单中点击打开form2。
【讨论】:
谢谢。不敢相信它这么简单..我会尽快检查的。因此,如果 csc“知道”如何合并所有文件.. assemble 和 project 文件有什么好处? (只是好奇......你已经回答了我的问题)......谢谢 很高兴它有帮助。请点赞。 :) 如果您使用的是 Visual Studio,项目文件基本上是自动创建的。项目文件不是编写和编译 c# 程序的必需组件..【参考方案2】:您需要使用 Visual Studio (VS) 命令提示符并提及项目中所有 Windows 窗体的 C# 代码文件名 (*.cs)。您必须包括每个表单的代码隐藏文件以及设计器代码隐藏文件。否则编译不会成功。
示例项目结构如下:
WindowsFormsApplication1.csproj
--Program.cs
--Form1.cs
----Form1.Designer.cs
--Form2.cs
----Form2.Designer.cs
上述项目的编译命令如下:
csc /target:winexe Program.cs Form1.cs Form1.Designer.cs Form2.cs Form2.Designer.cs
注意:编译时必须包含Program.cs
文件,否则编译器无法获取项目的入口点(Main
方法)。 /target
开关可帮助您将输出 EXE 文件作为基于 GUI 的 Windows 窗体应用程序启动。
上述命令有一个较短的版本,它使用通配符一次性包含所有文件名:
csc /target:winexe *.cs
最简单的替代方法是在 Visual Studio 命令提示符下使用 msbuild
命令代替 csc
。 msbuild
命令可用于构建项目文件,其中包含所有*.cs
文件的引用。下面是命令的样子:
msbuild WindowsFormsApplication1.csproj
这使我们不必单独提及所有 C# 代码文件名(无论是在项目根目录中还是嵌套的子目录中)。构建项目文件就完成了。
【讨论】:
这可以在没有 Windows 命令提示符的情况下完成,这就是重点。感谢您提供有关 *.cs 的更多信息。 ms build 似乎是更结构化的解决方案,但我只设法构建了一个薄模板来让我继续前进......我从来没有找到一个愚蠢的证明手册来向我展示高级选项:例子,图片;)......无论如何,谢谢...... 好的。伟大的。我还想突出显示/target
开关,它可以帮助您将输出 exe 作为 Windows 窗体应用程序启动。如果您不提及此开关,那么它将首先作为控制台应用程序启动,然后依次启动 Windows 应用程序。以上是关于使用 csc.exe 编译 Windows 窗体应用程序的主要内容,如果未能解决你的问题,请参考以下文章
payload免杀之Installutil.exe&csc.exe利用
《CRL Via C#》使用CSC.exe对两个文件进行编译