มาแปลง Console App ให้เป็น .NET Tools (NuGet)

.NET Tools คือ อะไร

  • Utility เล็กๆ ที่เราสามารถเรียกใช้งานได้เลย ไม่ต้องไปตั้ง Path วางให้วุ่นวาย Install ใช้จบเลย และถ้าหาก Publish ขึ้น NuGet Gallery เราสามารถดึงลงมาติดตั้งได้ง่ายๆเลยครับ

แปลง Console App ให้เป็น .NET Tools (NuGet)

Prerequisite: CS Project ต้องเป็นรูปแบบใหม่ที่มากับ .NET Standard ครับ ถ้า .NET Framework แบบเดิมๆ ทางที่ดีแนะนำให้ขยับเป็น .NET LTS ครับ โดยผมใช้ Project ที่ทำมานานหลายปีแล้ว pingkunga/MergeDOTNETTestReport มาเป็นตัวอย่างที่ลองแปลง Console App ให้เป็น .NET Tools

ขั้นตอนการแปลง Console App ให้เป็น .NET Tools เริ่มจากใน Visual Studio คลิกขวาที่ Project เลือก Properties เข้ามาในส่วน Package ครับ

  • ปรับให้ตอนสั่ง Build ให้สร้าง NuGet Package เลือก Generate NuGet package on Build อันนี้เทียบเท่ากับการใช้ Command dotnet pack ครับ
  • บอกให้ตอน Pack NuGet ให้มันปรับเป็น .NET Tools โดยเลือก Pack as a .NET Tool
  • สำหรับ Property อื่นๆของ NuGet เช่น พวก Version สามารถมากำหนดได้ เพิ่มได้ครับในส่วนของ Package Version ได้ครับ
  • สำหรับใครที่ขี้เกียจกด สามารถเข้าไปแก้ csproj ได้ โดยตรงครับ Line 5-9
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <PackAsTool>True</PackAsTool>
    <AssemblyVersion>1.0.1.0</AssemblyVersion>
    <FileVersion>1.0.1.0</FileVersion>
    <Version>1.0.1</Version>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="HtmlAgilityPack" Version="1.11.46" />
  </ItemGroup>
</Project>
  • ลอง Build จะได้ NuGet Package ออกมาครับ ที่ bin/<Configuration Mode> เช่น bin/Debug เป็นต้นครับ

นำ .NET Tools ที่ได้ไปติดตั้ง

กรณีที่ Publish ขึ้น nuget.org หรือ local repository อย่างตัว nexus เป็นต้น แล้วคร้บ

  • Install
##Synopsis 
dotnet tool install --global <<PACKAGE_NAME>>

##Sample Use
dotnet tool install --global MergeDOTNETTestReport

You can invoke the tool using the following command: MergeDOTNETTestReport
Tool 'mergedotnettestreport' (version '1.0.0') was successfully installed.
  • Update
##Synopsis 
dotnet tool update --global <<PACKAGE_NAME>>

##Sample Use
dotnet tool update --global MergeDOTNETTestReport 

Tool 'MergeDOTNETTestReport' was successfully updated from version '1.0.0' to version '1.0.1'.

กรณีที่เอา NuGet Tools ไปติดตั้งเอง ให้เอา Package ไปที่ Path ของเครื่องที่ต้องการติดตั้ง เช่น เอาไปไว้ใน "D:\06Utility\nupkgForBuild" เป็นต้น

  • Install
##Synopsis 
dotnet tool install --global --add-source <<NUGET_PACKAGE_PATH>> <<PACKAGE_NAME>>

##Sample Use
dotnet tool install --global --add-source "D:\06Utility\nupkgForBuild" MergeDOTNETTestReport

You can invoke the tool using the following command: MergeDOTNETTestReport
Tool 'mergedotnettestreport' (version '1.0.0') was successfully installed.
  • Update
##Synopsis 
dotnet tool update --global --add-source <<NUGET_PACKAGE_PATH>> <<PACKAGE_NAME>>

##Sample Use
dotnet tool update --global --add-source "D:\06Utility\nupkgForBuild" MergeDOTNETTestReport

Tool 'MergeDOTNETTestReport' was successfully updated from version '1.0.0' to version '1.0.1'.

สำหรับการใช้งานเหมือนเดิมครับ เรียกชื่อ Package ตรงๆ เหมือน exe ได้เลย ไม่ต้องมากังวลว่าต้องกำหนด Path ผิดด้วย ลง Tools แบบ --global เรียกได้ทุกจุดครับ ^__^

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.