利用CSC编译器生成WPF的 Hello World程序

     有研究了三个多小时,终于搞定了,写完博客一定要去休息会。。。。

  csc,相信有一部分人肯定了解或者用过。csc,是C#的编译器,通过一些的参数达到编译CS文件为可执行文件的目的。

      百度上有一些csc的内容,但并没有关于csc编译器编译生成WPF应用的,因此特写此文,并非重复写很多遍的东西。

     使用csc编译WPF程序,目的有二:

      1.有助于提高对WPF的理解,这与用WPF模板新建一个WPF项目是截然不同的,当你利用模板新建一个WPF程序,Application和Window窗口早就给你生成了,虽说方便,但最后的结果就是你连WPF是怎么运行的都不知道。

     2.当你在未安装VS但安装了.Net的计算机中需要编程的时候,可以使用此方法。(这只是个简单的例子,其他的东西就靠各位继续研究了)

      使用CSC ,首先是要添加csc.exe文件路径(位于你的系统.Net任何一个版本的安装目录:如:C:\Windows\Microsoft.NET\Framework\v4.0.30319)到系统环境变量的path路径中,只要学过Java的应该都会配置的,不会的要去百度。

     配置完成之后,(重新)打开命令提示符,定位到你将要编译程序的那个文件夹。要说编译C#程序,定要有cs文件。所以就新建一个文本文件并命名为1.cs,用文本编辑器打开它(记事本也凑合),在其中输入C#代码,然后在命令提示符中输入:

     csc 1.css

如果没有错误,就会在你编译程序的文件夹生成exe可执行文件。假如我们在C#代码中这样输入

using System;
class Program
{
static void Main()
{
    Console.WriteLine("Hello World"); 
    Console.Read();
}
}

用css编译器编译它,会生成一个exe文件,打开它,会发现出现一个控制台应用程序并输出了 Hello World,这代表着我们的程序编译成功了。

  这只是让大家简单的了解一下csc编译器。在讲用csc编译WPF程序之前,先得说些csc编译器基本语法参数:

   

/targert      生成的文件类型,具体见下:

/target:exe

创建 .exe 文件。

/target:library

创建代码库。

/target:module

创建模块。

/target:winexe

创建 Windows 程序。

/target:winmdobj

若要创建一个中间的.winmdobj 文件。

例如输入 csc /target:exe 1.cs,就生成了一个exe控制台程序

由于默认选择是 /target:exe,因此上边的控制台程序未加任何参数就编译成功了,若是编译WPF程序,应该要选择/target:winexe

 

/reference (/r )  引用程序集文件

 

例如输入 csc /r:System.dll /target:exe 1.cs ,就加载引用了System.dll

 

目前用到的就是以上两个,其他的请查阅msdn中的内容或者百度,现在开始构造我们的WPF程序。

众所周知,WPF有几个基本程序集,分别是PresentationCore.dll,PresentationFramework.dll和WindowsBase.dll,另外还要引用System.Xaml.dll(后一个与csc编译器位于同一个文件夹,前三个位于子文件夹WPF下),因此在编译的时候应当引用它们。

 

编写我们的C#代码:

 

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
public partial class App:Application
{
    [STAThread]    
        //表示单一线程单元
    public static void Main()    //主函数入口
    {
        App app=new App();      //创建一个继承自Application的App对象
        app.Run();             //运行它

    }
    Grid grid; //表示窗口中的Grid
    Window w;   //表示一个Window窗口
    protected override void OnStartup(StartupEventArgs e)    //App启动时触发
    {
        base.OnStartup(e);
        w=new Window();  //实例化窗口
        grid=new Grid();  //实例化Grid
        w.Title="Hello World Application";
        w.Content=grid;  //设置Window窗口的内容为一个Grid
        w.Width=300;
        w.Height=200;


        w.Loaded+=MainWindow_Loaded;
            
        w.Show();  //显示窗口
    }
    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        TextBlock tb=new TextBlock(); //创建一个TextBlock控件
        tb.Text="Hello World";  //设置文本
        grid.Children.Add(tb);  //将其添加到Grid中
               TranslateTransform tt=new TranslateTransform();   //创建一个平移变换对象
                tb.RenderTransform=tt;//关联到TextBlock控件
                tb.RenderTransformOrigin=new Point(0.5,0.5);  //设置变换点


            DoubleAnimation da = new DoubleAnimation();  //创建动画
                da.To = w.ActualWidth - tb.ActualWidth;      //设置动画的To属性
                da.Duration = TimeSpan.FromSeconds(10);     //设置动画的持续时间
                da.RepeatBehavior = RepeatBehavior.Forever;  //反复执行动画
                Storyboard.SetTarget(da, tb);   
                Storyboard.SetTargetProperty(da,new PropertyPath("RenderTransform.X"));
                Storyboard story = new Storyboard();
                story.Children.Add(da);  
                story.Begin();  //开始动画
        
    }
} 

 

 代码中加入了WPF中标志的动画,为了避免你不知道它是WPF程序

开始编译代码,在命令提示符中输入:

csc /target:winexe /r “WPF\PresentationCore.dll”, “WPF\PresentationFramework.dll”,”WPF\WindowsBase.dll”,” System.Xaml.dll” 1.cs

 

运行它,如果代码没什么问题,将会编译生成WPF应用程序。不知道大家有没有觉得这个编译命令是不是有点长,有点不利于输入呢?有没有简单的方法,比如将引用的所有程序集名单写入一个配置文件中?答案是可以的,但不是随便写进一个配置文件中就可以。

     如果你足够细心的话,你会发现上边的控制台程序并没有引用程序集文件的dll就直接using了,难道编译器自动寻找并引用了?当然不是,在csc所在的文件夹中,还有一个文件,名为csc.rsp,用记事本打开它,其中有许多的程序集引用,包含了大部分常用的程序集,但是并没有WPF相关的程序集,所以我们将WPF的几个核心程序集(PresentationCore.dll,PresentationFramework.dll,WindowsBase.dll)添加到csc.rsp文件中,具体怎么添加,相信各位打开csc.rsp就知道了,路径和命令提示符中输入的路径一样。(值得注意的是,Windows Vista以上的操作系统可能存在管理员权限问题,需要把此文件复制到别处编辑好再覆盖原来的文件即可,若还不行,则添加你所使用用户的修改权限)

 具体添加到csc.rsp的内容:

/r:"WPF\PresentationCore.dll"
/r:"WPF\PresentationFramework.dll"
/r:"WPF\WindowsBase.dll"
/r:"System.Xaml.dll"

 

 配置完成以后,可就是一劳永逸,因此在命令提示符中直接输入

csc /target:winexe 1.cs

点回车,我们的WPF程序就编译完成了,运行一下,看看是否成功了呢?

 

这篇文章花了我很多的时间,希望对大家有所帮助,如果觉得写得不好,请在评论中提出来,我将撤出首页,谢谢合作!!!!

posted @ 2012-08-10 18:02  deepwzh  阅读(3362)  评论(5编辑  收藏  举报