歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 不用Visual Studio也能開發.NET Windows應用

不用Visual Studio也能開發.NET Windows應用

日期:2017/3/1 9:19:48   编辑:Linux編程

對於.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開發者理解編譯的過程,這些知識點將對他們在進行專業應用開發中提供很大的幫助。

Copyright © Linux教程網 All Rights Reserved