嚐鮮.net core2.1 ——編寫一個global tool
本文內容參考微軟工程師Nate McMaster的博文.NET Core 2.1 Global Tools
用過npm開發都知道,npm包都可以以全域性的方式安裝,例如安裝一個http-server服務,可以使用npm i http-server -g來將http-server包安裝到全域性環境。安裝完之後,就可以通過cmd或者powershell執行全域性工具http-server命令,來使用靜態託管服務。dotnet tool 就是一個類似npm全域性工具的新特性,在.net core2.1正式加入。它的詳細使用方法可在微軟官方文件檢視,本文主要介紹如何編寫一個global tool併發布至nuget。
安裝.net core 2.1
安裝最新版.net core SDK 可前往DotNet官方站點的下載頁面,下載完成後雙擊安裝即可。安裝完成後開啟cmd執行dotnet --version
返回版本大於或等於2.1.300表示安裝成功。
安裝global tool 專案模板
開啟cmd 鍵入dotnet new --install McMaster.DotNet.GlobalTool.Templates
安裝完成後執行dotnet new
模板 短名稱 語言 標記
----------------------------------------------------------------------------------------------------------------------------
Console Application console [C#], F#, VB Common/Console
Class library classlib [C#], F#, VB Common/Library
.NET Core Global Console Tool global-tool [C#] Console/Empty
Unit Test Project mstest [C#], F#, VB Test/MSTest
xUnit Test Project xunit [C#], F#, VB Test/xUnit
Razor Page page [C#] Web/ASP.NET
MVC ViewImports viewimports [C#] Web/ASP.NET
MVC ViewStart viewstart [C#] Web/ASP.NET
ASP.NET Core Empty web [C#], F# Web/Empty
ASP.NET Core Web App (Model-View-Controller) mvc [C#], F# Web/MVC
ASP.NET Core Web App razor [C#] Web/MVC/Razor Pages
ASP.NET Core with Angular angular [C#] Web/MVC/SPA
ASP.NET Core with React.js react [C#] Web/MVC/SPA
ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA
Razor Class Library razorclasslib [C#] Web/Razor/Library/Razor Class Library
ASP.NET Core Web API webapi [C#], F# Web/WebAPI
global.json file globaljson Config
NuGet Config nugetconfig Config
Web Config webconfig Config
Solution File sln Solution
多出一個global-tool模板
.NET Core Global Console Tool global-tool
[C#] Console/Empty
編寫一個網頁下載工具
接下來通過編寫一個網頁下載的小工具來演示global tool的建立過程,此小工具的功能是根據網址,下載相應的頁面html並儲存為檔案。
首先新建一個WebDownloader資料夾。在資料夾中執行dotnet new global-tool
生成專案如下
objProgram.csWebDownloader.csproj
開啟WebDownloader.csproj修改為
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ToolCommandName>web-downloader</ToolCommandName>
<PackAsTool>True</PackAsTool>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="McMaster.Extensions.CommandLineUtils" Version="2.2.3" />
</ItemGroup></Project>
開啟Program.cs修改為
using System;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Net.Http;
using McMaster.Extensions.CommandLineUtils;
namespace WebDownloader
{
[Command(Description = "網頁下載小工具")]
class Program
{
public static int Main(string[] args) => CommandLineApplication.Execute<Program>(args);
[Argument(0, Description = "網址")]
[Required]
public string Url { get; }
[Option(Description = "儲存路徑")]
public string Path { get; } = "./";
[Option(Description = "檔名")]
public string Name { get; } = "content.txt";
private int OnExecute()
{
var client = new HttpClient();
var content = client.GetStringAsync(Url).Result;
var path = System.IO.Path.Combine(Path, Name);
File.WriteAllText(path, content);
return 0;
}
}
}
修改完成後全部儲存檔案,執行dotnet pack -o ./
會在專案根目錄生成一個WebDownloader.1.0.0.nupkg包。此包就是最終的nuget包,可上傳至nuget.org共享。
為了測試,我們直接將此包安裝至本地計算機。執行dotnet tool install WebDownloader -g --add-source ./
完成安裝。執行web-downloader -h
可以看到專案幫助文件
網頁下載小工具Usage: WebDownloader [arguments] [options]Arguments:
Url 網址Options:
-p|--path <PATH> 儲存路徑
-n|--name <NAME> 檔名
-?|-h|--help Show help information
執行web-downloader http://www.sina.com
後我們發現專案根目錄生成了一個content.txt檔案內容為新浪的首頁html
<!DOCTYPE html><!-- [ published at 2018-05-31 23:35:00 ] --><html><head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>新浪首頁</title>
<meta name="keywords" content="新浪,新浪網,SINA,sina,sina.com.cn,新浪首頁,門戶,資訊" />
<meta name="description" content="新浪網為全球使用者24小時提供全面及時的中文資訊,內容覆蓋國內外突發新聞事件、體壇賽事、娛樂時尚、產業資訊、實用資訊等,設有新聞、體育、娛樂、財經、科技、房產、汽車等30多個內容頻道,同時開設部落格、視訊、論壇等自由互動交流空間。" />
<link rel="mask-icon" sizes="any" href="//www.sina.com.cn/favicon.svg" color="red">
<meta name="stencil" content="PGLS000022" />
<meta name="publishid" content="30,131,1" />
<meta name="verify-v1" content="6HtwmypggdgP1NLw7NOuQBI2TW8+CfkYCoyeB8IDbn8=" />
<meta name="360-site-verification" content="63349a2167ca11f4b9bd9a8d48354541" />
<meta name="application-name" content="新浪首頁"/>
<meta name ="msapplication-TileImage" content="//i1.sinaimg.cn/dy/deco/2013/0312/logo.png"/>
<meta name="msapplication-TileColor" content="#ffbf27"/>
<meta name="sogou_site_verification" content="Otg5irx9wL"/><link rel="apple-touch-icon" href="//i3.sinaimg.cn/home/2013/0331/U586P30DT20130331093840.png" />...
...
如果不再使用此工具通過dotnet tool uninstall WebDownloader -g
解除安裝即可。
原文地址:https://www.cnblogs.com/huanent/p/9119213.html
.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com