首页 > 编程语言 >基于Win 自带的.NET FrameWork平台,使用文本文件编写C#代码,命令行编译以及引用第三方库

基于Win 自带的.NET FrameWork平台,使用文本文件编写C#代码,命令行编译以及引用第三方库

时间:2023-10-14 09:23:09浏览次数:35  
标签:文件 C# Win 代码 FrameWork Windows Patrick using NET

转载自 https://www.infoq.cn/article/2015/12/visual-studio-windows

 

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

  • 2015-12-29
  • 本文字数:2915 字

    阅读完需:约 10 分钟

对于.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 开发者理解编译的过程,这些知识点将对他们在进行专业应用开发中提供很大的帮助。

标签:文件,C#,Win,代码,FrameWork,Windows,Patrick,using,NET
From: https://www.cnblogs.com/newlyx/p/17763684.html

相关文章

  • C++四舍五入
    C++四舍五入1.利用C++输出函数cout<<setprecision(4)<<1.94999<<endl;只使用setprecision:控制浮点数的输出位数,注意控制的是总输出的数字个数,不是小数点后,并且将默认将小数后面的末尾0省略,并且将四舍五入cout<<fixed<<setprecision(2)<<1.48999<<endl;使用fixedsetprecisi......
  • [USACO] Piggy Back
    [USACO]PiggyBack题目大概意思是一个无向图,Bessie从1号仓库走到n号(每次花费x),Elsie从2号仓库走到n号(每次花费y),如果两个人走同一条路花费z,求总花费最小。跑三遍最短路,别得到Bessie从1号仓库出发的最短路,Elsie从2号仓库出发的最短路,和从n出发到其他每......
  • 14.4 Socket 双向数据通信
    所谓双向数据传输指的是客户端与服务端之间可以无差异的实现数据交互,此类功能实现的核心原理是通过创建CreateThread()函数多线程分别接收和发送数据包,这样一旦套接字被建立则两者都可以异步发送消息,本章将实现简单的双向交互功能。首先我们需要封装两个函数,这里RecvFunction函数......
  • P7450 [THUSCH2017] 巧克力
    P7450[THUSCH2017]巧克力题意给定一张网格图,每个格子有两个权重,\((a,c)\),我们希望找出一个不包含\(c=-1\)的联通块并且\(a\)的中位数最大,同时还要包含\(k\)种颜色。题解套路题都是nb题。首先\(k\)比较小,我们可以考虑一个类似斯坦纳树的\(dp\)。\(f_{i,j,S}\)表......
  • 使用Hot Chocolate和.NET 6构建GraphQL应用 —— 创建Attribute中间件
    需求在部分接口添加一个机器人校验的功能思路读者们可以看下使用HotChocolate和.NET6构建GraphQL应用(5)——实现Query过滤功能,我们可以自定义创建一个类似的特性中间件来对接口进行管理.添加了该特性的接口即可实现机器人校验功能.实现输入对象///用户输入public......
  • ecs的使用
    前言:最近在学习esc服务器的使用以及网站的建立,特此记录1.1ECS服务器的组成ECS服务器由实例(vcpu内存)块存储(磁盘)网络等物理组件和镜像快照安全组等功能组件组成1.2LAMP环境的部署搭建网站需要LAMP或者LNMP环境,这里简单介绍LAMP环境的建立,由于启动ecs服务器时已经......
  • [刷题笔记] Luogu P5658 [CSP-S 2019] 括号树
    Description给定一棵树,树的每个节点都有一个左括号或者右括号,求从根节点到每个点简单路径上的括号序列上合法的子括号序列数。Analysis显然树形dp。考虑如何设计状态,定义\(f_i\)表示从root到\(i\)节点的字串合法数量。考虑转移,如果当前的括号为左括号,我们无法和前面的......
  • cdq 分治
    cdq分治的思路仍是处理跨过当前区间中点的贡献,但递归顺序是左子区间、当前区间、右子区间。这仍然满足处理当前区间时两个子区间的相对顺序不变(但左子区间不一定是有序的)从嵌套数据结构的观点看,cdq分治就是树套树外层树的中序遍历,优点是空间少一个\(\log\)且常数更小LG4093......
  • Docker配置Oracle
    1.下载镜像dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g2.创建并启动容器默认启动方式dockerrun-itd-p1521:1521--nameoracle--restart=alwaysregistry.aliyuncs.com/helowin/oracle_11g持久化启动方式dockerrun-itd-p1521:1521-......
  • C语言预处理和宏
    C语言预处理和宏预处理命令预处理是C语言的一个重要功能,由预处理程序完成。当对一个源文件进行编译时,系统将自动调用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。这些在编译之前对源文件进行简单加工的过程,就称为预处理。预处理阶段的工作:把代码当......