BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

不用Visual Studio也能开发.NET Windows应用

| 作者 邵思华 关注 3 他的粉丝 发布于 2015年12月30日. 估计阅读时间: 12 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

对于.NET应用的开发人员而言,以Visual Studio(简称VS)作为首选的开发工具应当是一种最自然不过的选择了。毕竟这款IDE提供了各种优秀的特性:智能提示、调试、包管理等等,而且如今绝大部分特性在免费的Community版本中都可以任意使用。这样看来,似乎已经没有选择其他工具的必要了。

话虽如此,但在某些场合下我们仍然可以选择脱离Visual Studio这样的IDE而进行.NET代码的开发。最近,一位名叫Patrick Lambert的开发者在他的博客文章中介绍了不使用Visual Studio进行.NET Windows应用的过程。

Patrick认为,选择脱离VS环境进行开发有几点可能的理由:一是开发者或许想深入地了解一下.NET应用的编译过程,而不希望被图形用户界面蒙蔽了双眼。二是开发者或许出于某些原因,例如平台或工作环境的原因而无法安装VS。三是开发者只打算开发一个非常简单的应用,为了一个5KB大小的应用去下载一个5GB大小的IDE好像有些太过奢侈。如果以上任何一点原因适用于你的情况,就可以考虑尝试一下Patrick的教程。

必备依赖

在开始编码之前,首先看看有哪些依赖项是必须的,这里假设我们选择C#语言开发基于.NET Framework的应用。好消息是.NET Framework不再依赖于其他组件,只要在操作系统中安装过它,就无需再安装任何组件了!而且许多系统在安装时会自动包括.NET Framework,可以通过检查C:\Windows\Microsoft.NET\Framework目录确认是否已安装。在这个目录下会列出每个已安装的版本的子目录。

接下来要搞定编译的问题,在.NET Framework中已经自带了C#编译器。这篇教程中要用到两个二进制文件,其中csc.exe就是C#编译器,而msbuild.exe则是负责读取项目文件(例如.csproj文件)并进行编译的工具。也就是说,如果某人发送给你一个Visual Studio项目文件,那么你也能够在不安装Visual Studio的情况下,通过运行msbuild对源代码进行编译。

.NET项目的结构

Patrick接下来介绍了VS项目的结构,虽然在本篇教程中不需要创建项目文件,但对项目结构的理解可以帮助我们了解一些概念。通常来说,在新建Windows项目时,VS会自动创建一个Program.cs文件作为入口、一个包含了代码所依赖资源信息的.csproj文件、包含二进制名称、版本号等信息的AssemblyInfo.cs文件,以及包含了自定义配置信息的App.config文件。其中App.config这个文件主要的用途是配置一些相关的依赖信息,例如数据库连接字符串、Social Login的帐号等等。

主体代码

接下来,Patrick展示了一段非常简单的代码。由于这篇教程不使用Visual Studio等IDE,因此可以随意选择最喜爱的文本编辑器编写以下代码,并保存为helloworld.cs文件:

using System;

namespace HelloWorld
{
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world!");
        }
    }
}

如你所见,这段代码的作用就是简单地在控制台中输出“Hello World!”而已。因为我们的专注点不在C#代码本身,因此不必纠结于它太过简单。编译指令也很简单,只需指定编译器文件的位置,通过/out:参数指定的输出文件,并在最后指定源代码文件,就能够创建可运行的应用程序了。参考如下命令:

E:\code> C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /out:helloworld.exe helloworld.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.5420
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

E:\code> helloworld
Hello world!

E:\code>

添加程序集信息

现在你已经得到了这个可运行的exe文件了,但如果右键检查一下文件的详细信息,你会发觉诸如文件描述、版本号与版权等信息都是空白的。这些信息应该是由程序集所定义的,而通常我们都是在VS中填写这些信息的。其实即使没有VS也一样简单,只需修改一下helloworld.cs即可:

using System;
using System.Reflection;
[assembly: AssemblyTitle("Hello World Application")]
[assembly: AssemblyCopyright("(C) 2015 John Doe")]
[assembly: AssemblyFileVersion("1.0")]

namespace HelloWorld
{
    // class definition
}

这里省略了类的定义,因为这部分没有任何变化。变化之一是引入了System.Reflection这个命名空间,随后为程序集提供了相应的信息。当我们再次编译后,就能够在可运行文件的详细信息中找到他们了。

具有图形界面的应用

在介绍了控制台应用的创建之后,Patrick又介绍了脱离VS进行图形界面应用的创建过程。微软现在推荐通过XAML语言创建统一应用,这种语言基于XML定义应用的界面。不过出于简单起见,Patrick在这里选择了创建基于Windows Forms的桌面应用。

经过修改的helloworld.cs代码如下:

using System;
using System.Reflection;
using System.Windows.Forms;
[assembly: AssemblyTitle("Hello World Application")]
[assembly: AssemblyCopyright("(C) 2015 John Doe")]
[assembly: AssemblyFileVersion("1.0")]

namespace HelloWorld
{
    public class Program
    {
        static void Main(string[] args)
        {
            MessageBox.Show("Hello world!", "Hi!");
        }
    }
}

这段代码与改动前非常相似,一个变更是引入了System.Windows.Forms命名空间,另一个则是通过MessageBox输出信息。在运行时,Windows系统会自行处理图形窗口的创建等工作。运行结果如下:

引用第三方类库

最后,Patrick介绍了如何在应用中引用第三方资源,这次的代码通过使用Amazon AWS SDK实现了一个发送短消息通知的功能:

using System;
using Amazon;
using Amazon.SimpleNotificationService;
using Amazon.SimpleNotificationService.Model;

namespace AwsSnsSample
{
    class Program
    {
        public static void Main(string[] args)
        {
            var sns = new AmazonSimpleNotificationServiceClient();
            sns.Publish(new PublishRequest
            {
                Subject = "Hi!",
                Message = "Hello world!",
                TopicArn = "arn:aws:sns:us-west-2:0000000000:snstest1"
            });
        }
    }
}

在进行编译之前,首先要下载一个AWS SDK,并设置相应的IAM帐号,以用于发送信息。在编译命令中,要点在于通过/r:选项指定AWS的引用:

E:\code> C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /out:helloworld.exe /r:"C:\Program Files (x86)\AWS SDK for .NET\bin\Net35\AWSSDK.dll" helloworld.cs

虽然本文中所介绍的应用比较简单,但其实原理都是相通的,通过类似的方法也可以创建基于ASP.NET、Azure或WPF等应用。虽然Patrick并不建议在专业应用开发中采取这种比较原始的方式,但了解这一过程能够帮助.NET开发者理解编译的过程,这些知识点将对他们在进行专业应用开发中提供很大的帮助。


感谢董志南对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者(已满),InfoQ读者交流群(#2)InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

我用notepad++ 和Clojure-clr开发约1.5万行代码的.NET Windows应用:-) by Lin Pengcheng

我用notepad++ 和Clojure-clr开发约1.5万行代码的免费的.NET Windows应用"林鹏程财务分析软件":-)
github.com/linpengcheng/fa

Re: 我用notepad++ 和Clojure-clr开发约1.5万行代码的.NET Windows应用:-) by Yu Wang

敬你是条汉子!

手写IL是一种什么体验? by liu haoyang

曾经试过用vs code写MSIL,并用ilasm编译。然后尝试了一周之后,就没有然后了...

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT