這一篇文章相當簡單,主要說明 ASP.NET Core 的程式如何使用不同的 framework 來撰寫.
在上一篇文章中提到了 .net core 程式需使用 .net standard 所定義的平台標準來使用 API,所以這一篇文章就做一個簡單的介紹.
下載 .net core cli
.net core cli 的安裝程式可以在 https://github.com/dotnet/cli 下載 .NET Core SDK Installer,這包含 .net core 本身所有的東西,所以 cli 也在裡面.
新增 NuGet.config
請選擇一個你要使用的目錄,然後新增一個 NuGet.config 檔案,其內容如下
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="cli-deps" value="https://dotnet.myget.org/F/cli-deps/api/v3/index.json" />
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>
裡面主要是新增了 .net core 的 release nuget path,目前來說你下載的都是 RC2 版本.
新增 project.json
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-rc2-*"
}
}
},
"net451": {}
}
}
由於後面的內容並不會真正寫 ASP.NET core 的程式碼,所以在這裡並沒有加入 asp.net core 相關的基礎元件,只是簡單定義了兩個 framework,一個是將利用 .net core (netcoreapp1.0)來啟動,另一個是利用 full framework (net451) 來啟動.net451 並不是可以跨平台的,所以只能在 Windows 上跑,因此我也假設你的電腦裝有 .net framework 4.5.1 以上的版本.
新增 Program.cs
using System;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
#if NET451
Console.WriteLine("Hello from net451");
#elif NETCOREAPP1_0
Console.WriteLine("Hello from netcoreapp1.0");
#endif
}
}
}
以上是一個相當簡單的例子,用來說明如果你的程式碼要支援不同的 framework,也就是可能要支援不同的 .net standard.不同的 .net standard 所提供的 API 定義會有不同,所以你希望你的程式遇到那些不同的 API 定義時能有個選擇,所以上面的程式碼就是一個簡單的例子.
透過 .net core cli 來進行編譯
在你的目錄下,輸入
>dotnet restore
完成後再輸入
>dotnet build
完成後,你會在 .\bin.\Debug 底下看到 net451 和 netcoreapp1.0 兩個目錄.這就是專門為不同 framework 產生的結果目錄.
到 net451 目錄下,你會看到一個 exe 和一個 pdb,你可以直接執行 exe 檔案,你將會看到輸出 Hello from net451 的字樣.這目錄產生的檔案並不具備跨平台的能力,所以只能在 Windows 作業系統上執行.
到 netcoreapp1.0 目錄下,你會看到幾個 json 和 一個 dll 以及一個 pdb,你可以執行 dotnet <name>.dll (<name> 代表你的 dll 檔名),你將會看到 Hello from netcoreapp1.0 出現在畫面上.那幾個 JSON 檔的內容很重要,千萬不能刪除,因為裡面定義了程式所需要用的相依元件與 runtime 資訊.由於這是 .net core 產生的程式,具備跨平台的能力,你可以直接把這些檔案複製到其它平台,然後利用該平台的 dotnet 來執行該元件.
透過以上簡單的範例,你就可以知道該如何在你的程式裡寫符合不同 framework 程式碼的方式.不過最簡單的方式還是將所有程式碼用 netcoreapp 的 framework 來寫就好,畢竟是跨平台,任何平台都可以,而且可以少去那些 #if ... #endif 的標記.
希望這個簡單的例子能對你有幫助.