自己制作C#文件编译器

对于初学者而言, 新建控制台程序,就开一个visual studio可能太过于奢侈了,况且,不利于初学者对基本知识的掌握,所以,可以利用下面的一个小程序结合一个文本编辑器,就可以编译C#的控制台文件了。

第一个界面:

SpxImage

 

第二个界面:

SpxImage

 

做一个简单的说明:

 

第一个界面是起始界面,第一个三个按钮是picturebox控件组成的,作用分别是:运行,浏览C#文件,和退出。

 

当点击运行时,就会编译C#文件,浏览是弹出第二个界面,用于查找C#文件。

程序原理:

在这个程序中,我是利用一个批处理文件来完成编译C#文件的,在这里,需要了解一个批处理和C#的CSC命令(在此不做讲解,去Google或者百度吧)。

 

“运行”按钮的代码:

 

if (File.Exists("run.bat"))
            {
                StreamReader sr = new StreamReader("run.bat");
                string str = sr.ReadToEnd();
                sr.Close();
                if (str == "" || str == string.Empty || str == null)
                {
                    MessageBox.Show("请选择需要编译的C#文件!", "C#文件编辑器", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
                else
                {
                    Process.Start("run.bat");
                }
            }
            else
            {
                MessageBox.Show("缺少编译文件!", "C#文件编辑器", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

 

“浏览”按钮的代码:

//浏览文件
     private void pictureBox3_Click(object sender, EventArgs e)
     {
         Form2 f2 = new Form2();
         f2.ShowDialog();
     }

“退出”的按钮:

//退出
       private void pictureBox4_Click(object sender, EventArgs e)
       {
           DeleteFile();
           Application.Exit();

       }

//DeleteFile()方法:

//用于删除生成的文件

private static void DeleteFile()
{
    if (File.Exists("run.bat"))
    {
        File.Delete("run.bat");
    }
}

好了,第一个界面的代码基本完成。

 

现在来看第二个界面的代码:

“浏览”按钮的事件:

 

if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
           {
               string spath = this.openFileDialog1.FileName;//spath包含了路径和文件名以及文件拓展名
               this.textBox1.Text = spath;
           }

“确定”按钮的事件:

if (this.textBox1.Text == "" || this.textBox1.Text == string.Empty || this.textBox1.Text == null)
            {
                MessageBox.Show("请选择需要编译的C#文件!", "C#文件编辑器", MessageBoxButtons.OK, MessageBoxIcon.Stop);

            }
            else
            {

                /*   cmd命令语法格式:
                 *   cd /d C:/Windows/Microsoft.NET/Framework/v2.0.50727
                 *   cd /d 文件所在的路径
                 *   csc 文件名
                 *   文件名
                 */


                /**
                 * set Path=C:/Windows/Microsoft.NET/Framework/v2.0.50727
                 * csc 文件所在的路径/文件名
                 * 文件名
                 *
                 * ***/
                StringBuilder sb = new StringBuilder();
                sb.Append("@echo off/r/nset Path=C://Windows//Microsoft.NET//Framework//v2.0.50727/r/necho on");//设置临时环境变量
                string PathWithNameAndExtendname = this.openFileDialog1.FileName;//PathWithNameAndExtendname  文件所在的路径、文件名(包含了文件的拓展名)
                DirectoryInfo di = Directory.GetParent(PathWithNameAndExtendname);
                FileInfo fi = new FileInfo(PathWithNameAndExtendname);
                sb.Append("/r/ncsc /out:" + Path.GetDirectoryName(PathWithNameAndExtendname) + "//" + Path.GetFileNameWithoutExtension(PathWithNameAndExtendname) + ".exe");//编译命令的前半部分的out命令
                sb.Append(" /target:exe " + fi.FullName);//编译命令的后半部分 输出目标
                sb.Append("/r/n@echo off/r/n cd /d " + Path.GetDirectoryName(PathWithNameAndExtendname));
                sb.Append("/r/necho on/r/n" + Path.GetFileNameWithoutExtension(PathWithNameAndExtendname) + ".exe" + "/r/nPause");//运行(包含了文件的拓展名)
                FileStream fs = new FileStream("run.bat", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
                fs.Close();
                StreamWriter sw = new StreamWriter("run.bat");
                sw.Write(sb);
                sw.Flush();
                sw.Close();
                this.Close();
好了  以上就是一个简易的C#文件编译器了的80%的代码了。源码已经在我的空间里发布了。需要的可以下载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值