備忘録

備忘録

C#スクリプトを実行する方法

Ⅰ. はじめに

タイトルの通り「C#スクリプトを実行する方法」です。

Ⅱ. 必要なもの

Ⅲ. やり方

1. dotnet-script をインストールする
dotnet tool install -g dotnet-script
2. サンプルプログラムを書く

main.csx

Console.WriteLine("Hello world!");
3. 実行する
dotnet script main.csx

実行結果

f:id:kagasu:20181229085416p:plain

その他

URLから実行する
dotnet script https://tinyurl.com/y8cda9zt
REPL
$ dotnet script
> var x = 1;
> x + 2
3
Scaffolding
mkdir hoge
cd hoge
dotnet script init
IPアドレスを表示するサンプルプログラム

VSCode を利用する場合は設定で editor.codeLens を無効にした方が見やすくなります。

#! "netcoreapp2.1"
#r "nuget:NetStandard.Library,2.0.3"
#r "nuget: Utf8Json, 1.3.7"

using System.Net.Http;
using Utf8Json;

var client = new HttpClient();
var str = await client.GetStringAsync("https://httpbin.org/get");
var obj = JsonSerializer.Deserialize<dynamic>(str);
Console.WriteLine((string)obj["origin"]);

FiddlerでMessagePackを見る方法

Ⅰ. はじめに

タイトルの通り「FiddlerでMessagePackを見る方法」です。

Ⅱ. やり方

1. MsgPackViewer2.dll をダウンロードする

https://github.com/kagasu/MsgPackViewer2/releases

2. MsgPackViewer2.dll をコピーする
copy MsgPackViewer2.dll "%USERPROFILE%\Documents\Fiddler2\Inspectors\MsgPackViewer2.dll"

実行結果

f:id:kagasu:20181228155759p:plain

エクスプローラのナビゲーションウィンドウからDropboxを削除する方法

Ⅰ. はじめに

タイトルの通り「エクスプローラのナビゲーションウィンドウからDropboxを削除する方法」です。
f:id:kagasu:20181227182009p:plain

Ⅱ. やり方

1. レジストリエディタで以下を開く
HKEY_CLASSES_ROOT\CLSID\{E31EA727-12ED-4702-820C-4B6445F28E1A}
2. System.IsPinnedToNamespaceTree を 1 から 0 に変更する
3. {E31EA727-12ED-4702-820C-4B6445F28E1A} を右クリックし、アクセス許可をクリック

f:id:kagasu:20181229090441p:plain

4. Everyone を追加し、フルコントロールを拒否する

f:id:kagasu:20181229090520p:plain

実行結果

f:id:kagasu:20181227182127p:plain

C#でコマンドライン引数を扱う方法

Ⅰ. はじめに

タイトルの通り「C#コマンドライン引数を扱う方法」です。

Ⅱ. ConsoleAppFrameworkを利用する方法

1. NuGetからConsoleAppFrameworkをインストールする
Install-Package ConsoleAppFramework
2. サンプルプログラムを書く

Program.cs

using System;
using ConsoleAppFramework;
using Microsoft.Extensions.Hosting;
using System.Threading.Tasks;

namespace Test
{
  class Program : ConsoleAppBase
  {
    static async Task Main(string[] args)
    {
      await Host.CreateDefaultBuilder().RunConsoleAppFrameworkAsync<Program>(args);
    }

    public void Run([Option("n", "User Name")] string name)
    {
      Console.WriteLine($"Hello {name}");
    }
  }
}
3. 実行結果

引数ありの場合

$ Test.exe -n tanaka
Hello tanaka

引数なしの場合

$ Test.exe
Usage: Test [options...]

Options:
  -n, -name <String>    User Name (Required)

Commands:
  help          Display help.
  version       Display version.

Ⅲ. CommandLineParserを利用する方法

1. NuGetから CommandLineParser をインストールする
Install-Package CommandLineParser
2. サンプルプログラムを書く

Option.cs

public class Option
{
  [Option('x', "valuex", Required = true, HelpText = "Xの値", Default = 0)]
  public int X { get; set; }

  [Option("valuey", Required = true, HelpText = "Yの値", Default = 0)]
  public int Y { get; set; }

  /*
  [Value(0, Required = true, MetaName = "valuex", HelpText = "Xの値")]
  public int X { get; set; }

  [Value(1, Required = true, MetaName = "valuey", HelpText = "Yの値")]
  public int Y { get; set; }
  */
}

Program.cs

class Program
{
  static void Main(string[] args)
  {
    var result = Parser.Default.ParseArguments<Option>(args);

    if (result.Tag == ParserResultType.Parsed)
    {
      var parsed = (Parsed<Option>)result;

      Console.WriteLine(parsed.Value.X);
      Console.WriteLine(parsed.Value.Y);
    }
  }
}
3. 実行結果

引数ありの場合

$ CommandLineParserTest.exe -x 1 --valuey 2
1
2

引数なしの場合

$ CommandLineParserTest.exe
CommandLineParserTest 1.0.0
Copyright (C) 2018 CommandLineParserTest
ERROR(S):
Required option 'x, valuex' is missing.
Required option 'valuey' is missing.

  -x, --valuex    Required. (Default: 0) Xの値

  -y, --valuey    Required. (Default: 0) Yの値

  --help          Display this help screen.

  --version       Display version information.

Ⅳ. System.CommandLine.DragonFruit を使う方法

1. パッケージソースを追加する

https://dotnet.myget.org/F/system-commandline/api/v3/index.json

2. System.CommandLine.DragonFruit をインストールする
Install-Package System.CommandLine.DragonFruit
3. サンプルプログラムを書く

Program.cs

static void Main(int intOption = 42, bool boolOption = false, FileInfo fileOption = null)
{
  Console.WriteLine($"The value for --int-option is: {intOption}");
  Console.WriteLine($"The value for --bool-option is: {boolOption}");
  Console.WriteLine($"The value for --file-option is: {fileOption?.FullName ?? "null"}");
}
4. 実行結果

引数なしの場合

$ Test.exe
The value for --int-option is: 42
The value for --bool-option is: False
The value for --file-option is: null

引数ありの場合

$ Test.exe --int-option 1 --file-option c:\a.txt
The value for --int-option is: 1
The value for --bool-option is: False
The value for --file-option is: c:\a.txt

--helpをつけた場合

$ Test.dll --help
Usage:
  Test [options]

Options:
  --int-option     intOption
  --bool-option    boolOption
  --file-option    fileOption
  --version        Display version information

Node.jsで実行ファイル(.exe)を作成する方法

Ⅰ. はじめに

タイトルの通り「Node.jsで実行ファイル(.exe)を作成する方法」です。

Ⅱ. やり方

1. nexe をインストールする
npm i -g nexe
2. 実行する
# 通常
nexe index.js

# Windows で Linux 向けバイナリを吐かせる場合
nexe index.js --target linux-x64
実行結果


2023/02/27 追記

  • 別の方法(現時点でExperimentalなのでStableでは無い)