Kursus Singkat di .NET Tools

Bangun alat pengembang canggih yang berjalan di mana saja

Bangun Alat .NET di Garasi Anda untuk Kesenangan dan Keuntungan! ( valeriiaarnaud)

“Kita menjadi apa yang kita lihat. Kami membentuk alat kami dan kemudian alat kami membentuk kami. —Marshall McLuhan

Nyalakan Mesin Anda ️

Produktivitas adalah proses yang berubah-ubah yang membutuhkan fokus dan ketekunan. Dengan kompleksitas dalam sistem teknologi yang tumbuh ke tingkat yang sulit diselesaikan, tempat terakhir yang ingin dialami oleh pengembang adalah kompleksitas dalam konfigurasi alat. Terlepas dari pilihan alat tertentu, manfaat memilih konsistensi di seluruh tumpukan teknis tim Anda mencakup peningkatan efisiensi pengembang, penggunaan ulang kode alami, dan kepemilikan fitur bersama.

C# adalah bahasa yang sangat populer dan ekosistem paket .NET sangat besar. Dengan diperkenalkannya MAUI dan ASP.NET Core, dimungkinkan untuk membuat sistem .NET full stack yang lintas platform, cloud-native, dan sangat dapat diskalakan. Jika tim Anda bekerja dalam C#, perkakas .NET sangat cocok.

Tutorial ini memberikan ikhtisar tentang cara membuat alat baris perintah .NET yang dapat didistribusikan dengan NuGet dan dijalankan di Windows, macOS, dan Linux.

Pergi!

Mari kita mulai dengan menginstal .NET 7 . Setelah Anda menginstal .NET, uji sistem Anda dengan mengeluarkan dotnet --versionperintah di jendela terminal.

bobby@mbp ~ % dotnet

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.

dotnet new console -n Squeeze && cd Squeeze

dotnet add package ZipCreator

dotnet add package System.CommandLine --prerelease

var inputFileArg = new Argument<FileInfo>(
  name: "input",
  description: "Zip file manifest containing glob patterns of file paths to include"
);

var outputFileArg = new Argument<FileInfo>(
  name: "output",
  description: "Path to zip file output"
);

var forceOption = new Option<bool>(
  name: "--force",
  getDefaultValue: () => false,
  description: "Overwrite output file if it exists"
);

var verboseOption = new Option<bool>(
  name: "--verbose",
  getDefaultValue: () => false,
  description: "Show verbose log statements"
);

var rootCommand = new RootCommand("Create a zip via a manifest file containing glob pattern rules");
rootCommand.AddArgument(inputFileArg);
rootCommand.AddArgument(outputFileArg);
rootCommand.AddOption(forceOption);
rootCommand.AddOption(verboseOption);

Action<FileInfo, FileInfo, bool, bool> handler = (inputFile, outputFile, force, verbose) =>
{
  // Handler code goes here
};

Saat handlerdipanggil, inputFiledan outputFileakan diteruskan instance yang FileInfodibuat dari nilai string yang diteruskan melalui baris perintah oleh pengguna saat mereka memanggil alat kami. Demikian pula, forcedan verboseakan diatur ke trueatau falsetergantung pada apakah --forcedan/atau --verbosebendera ada.

Untuk mengonfigurasi kita, handlerkita juga harus memanggil rootCommand.SetHandlerdan meneruskan semua argumen yang ingin kita akses.

rootCommand.SetHandler(handler, inputFileArg, outputFileArg, forceOption, verboseOption);

using System.CommandLine;
using ZipCreator;

public class Program
{
    [STAThread]
    static public async Task<int> Main(string[] args)
    {
        var inputFileArg = new Argument<FileInfo>(
            name: "input",
            description: "Zip file manifest containing glob patterns of file paths to include"
        );

        var outputFileArg = new Argument<FileInfo>(
            name: "output",
            description: "Path to zip file output"
        );

        var forceOption = new Option<bool>(
            name: "--force",
            getDefaultValue: () => false,
            description: "Overwrite output file if it exists"
        );

        var verboseOption = new Option<bool>(
            name: "--verbose",
            getDefaultValue: () => false,
            description: "Show verbose log statements"
        );

        var rootCommand = new RootCommand("Create a zip via a manifest file containing glob pattern rules");
        rootCommand.AddArgument(inputFileArg);
        rootCommand.AddArgument(outputFileArg);
        rootCommand.AddOption(forceOption);
        rootCommand.AddOption(verboseOption);

        Action<FileInfo, FileInfo, bool, bool> handler = (inputFile, outputFile, force, verbose) =>
        {
            Console.WriteLine(inputFile.FullName);
            Console.WriteLine(inputFile.FullName);
            Console.WriteLine(force.ToString());
            Console.WriteLine(verbose.ToString());
        };

        rootCommand.SetHandler(handler, inputFileArg, outputFileArg, forceOption, verboseOption);

        return await rootCommand.InvokeAsync(args);
    }
}

Pemberhentian

Sekarang setelah kita menulis alat kita, mari kita jalankan dengan VS Code untuk memastikannya berfungsi. Ketika Anda membuka folder yang berisi Squeeze.csprojAnda akan melihat prompt berikut.

Kode VS C# Aset yang Diperlukan

Klik tombol Ya untuk menambahkan launch.jsondan tasks.jsonke .vscodefolder di root repo Anda. Jika permintaan ini tidak muncul, Anda dapat menyalin file dari repo pendamping .

Ubah launch.jsonsehingga meneruskan argumen ke program kita saat runtime.

"args": [
    "input.txt",
    "output.zip",
    "--verbose"
]

Titik Henti Debugger Kode VS

Berhasil! Mari publikasikan alat ke NuGet dan selesaikan dengan kuat.

Putaran Terakhir ️

Sebelum kami dapat menerbitkan ke NuGet, kami perlu membuat akun dan membuat kunci API dengan masuk dan menavigasi ke tautan di bawah.

Kami perlu menginstruksikan nugetperintah untuk mengemas proyek kami sebagai alat. Tambahkan bidang berikut ke Squeeze.csprojbawah <PropertyGroup>bagian.

<PackAsTool>true</PackAsTool>
<ToolCommandName>squeeze</ToolCommandName>

dotnet pack --configuration Release

dotnet nuget push ./bin/Release/Squeeze.1.0.0.nupkg --source https://api.nuget.org/v3/index.json --api-key <Your NuGet API key>

dotnet tool install --global Squeeze

bobby@mbp % squeeze -h

Description:
  Create a zip via a manifest file containing glob pattern rules

Usage:
  Squeeze <input> <output> [options]

Arguments:
  <input>   Zip file manifest containing glob patterns of file paths to include
  <output>  Path to zip file output

Options:
  --force         Overwrite output file if it exists [default: False]
  --verbose       Show verbose log statements [default: False]
  --version       Show version information
  -?, -h, --help  Show help and usage information

Anda telah berhasil memublikasikan alat .NET ke NuGet — bagus sekali!

Jika Anda tertarik dengan sedikit tambahan kredit, coba buat Azure CI/CD Pipeline yang secara otomatis menaikkan versi, dan menerbitkan paket Anda.

Terima kasih sudah membaca!

Want to Connect?

If you found the information in this tutorial useful please subscribe on Medium, follow me on Twitter, and/or subscribe to my YouTube channel.

Suggested posts

Revolusi Tempat Kerja: Para Ahli Teratas Membahas Kerja Hibrid dan Jarak Jauh

Revolusi Tempat Kerja: Para Ahli Teratas Membahas Kerja Hibrid dan Jarak Jauh

Dalam lanskap bisnis yang berkembang pesat saat ini, konsep kerja hibrid dan jarak jauh telah mendapatkan momentum yang belum pernah terjadi sebelumnya. Saat perusahaan terus beradaptasi dengan perubahan kebutuhan dan harapan karyawan mereka, para ahli dari berbagai bidang berkumpul untuk membahas manfaat, tantangan, dan masa depan cara kerja transformatif ini.

Belajar di Minggu Kerja lebih penting daripada yang Anda pikirkan

Belajar di Minggu Kerja lebih penting daripada yang Anda pikirkan

Kita sering menemukan diri kita berjuang untuk menerapkan apa yang kita tahu baik untuk kita. Dari memberi tahu orang penting bahwa kita mencintai mereka hingga mengingat untuk berbicara seperti bajak laut, akan selalu ada orang yang mengklaim bahwa acara sehari, seminggu, atau sebulan tidak diperlukan karena mereka sudah melakukan hal-hal itu.

Related posts

Memikirkan Kembali Media: Lima Kebenaran McChesney dan Masa Depan Komunikasi

Di dunia yang sangat terhubung saat ini, sistem media memainkan peran penting dalam membentuk opini publik, dan akibatnya, dalam pengambilan keputusan yang demokratis. Dalam analisisnya yang mendalam tentang ekonomi politik komunikasi, cendekiawan Robert McChesney menantang kebijaksanaan konvensional dan menyajikan apa yang disebutnya sebagai “lima kebenaran” tentang media.

Penampilan Solo Gadis Berambut Merah

Atas tugas dari Hayden, Katie memfilmkan dirinya sedang masturbasi.

Penampilan Solo Gadis Berambut Merah

Sudah lewat tengah malam ketika Hayden mengantar Katie kembali ke asrama kampusnya setelah malam mereka bersama. Dia memiliki kelas awal di pagi hari dan tidak memiliki pakaian ganti lagi setelah tinggal bersamanya malam sebelumnya.

Pembunuhan Jordan Neely dan Masalah Rasisme “Patriotik”.

Bisakah AS mengambil langkah penting untuk tidak menyamakan perilaku rasis dengan menjadi orang Amerika yang baik?

Pembunuhan Jordan Neely dan Masalah Rasisme “Patriotik”.

[Peringatan pemicu: Esai ini mencakup tangkapan layar orang-orang yang memuji pembunuh Jordan Neely.] Petugas penegak hukum akhirnya - dan mungkin dengan enggan - menuntut Daniel Penny, pria yang mencekik Jordan Neely sampai dia mati, atas pembunuhan itu.

Apa yang membuat podcast berpengaruh?

Apa yang membuat podcast berpengaruh?

Minggu lalu saya melihat siaran pers, dikirim melalui PressGazette (situs web berita media Inggris). Artikel tersebut mengumumkan bahwa Acast, perusahaan hosting dan periklanan podcast Scandi, akan memimpin konsorsium penerbit "mungkin yang paling berpengaruh" dalam podcasting.