利用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程序就编译完成了,运行一下,看看是否成功了呢?
这篇文章花了我很多的时间,希望对大家有所帮助,如果觉得写得不好,请在评论中提出来,我将撤出首页,谢谢合作!!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架