dotnet.exeでC#の単独ソースファイルを実行できないか模索する

C# コンピュータ
C#

プロジェクトを作らずにdotnet runで単独のcsファイルが実行できると便利なので方法を調べましたが見つかりませんでした。

仕方がないのでプロジェクトを自動作成するPowerShellスクリプトを作成してみました。

ファイル名:Run-CS.ps1

<#
.SYNOPSIS
単独のcsファイルを実行する

.DESCRIPTION
単独のcsファイルを実行する

.EXAMPLE
Run-CS.ps1 hoge.cs

.PARAMETER CSPath
実行するcsファイルのパス


#>
param(
    [switch]
    $Help,
    [string]
    $CSPath="hoge.cs"
)
if ($Help) {
    Get-Help $MyInvocation.MyCommand.Path
    Exit 1
}

$ProjectName = [System.IO.Path]::GetFileNameWithoutExtension($CSPath)
if (!(Test-Path $ProjectName))
{
    # プロジェクトフォルダがない場合作成
    dotnet.exe new console -n $ProjectName
}
Remove-Item $ProjectName/*.cs
Copy-Item $CSPath $ProjectName/
dotnet.exe run --project $ProjectName/$ProjectName.csproj
使い方は、まず以下のソースコードを適当なフォルダに作成します。

ファイル名:hello.cs

using System;

class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello 4nd World!");
    }
}

ソースコードと同じフォルダで

Run-Cs.ps1 ./hello.cs #Hello 4nd World! ⇐ 実行結果

を実行します。
かなり適当なスクリプトですので問題がある場合その都度修正することにします。

 

ファイル名:Build-CS.ps1

<#
.SYNOPSIS
単独のcsファイルをビルドする

.DESCRIPTION
単独のcsファイルをビルドする

.EXAMPLE
Run-CS.ps1 hoge.cs

.PARAMETER CSPath
ビルドするcsファイルのパス


#>
param(
    [switch]
    $Help,
    [string]
    $CSPath="hoge.cs"
)
if ($Help) {
    Get-Help $MyInvocation.MyCommand.Path
    Exit 1
}

$ProjectName = [System.IO.Path]::GetFileNameWithoutExtension($CSPath)
if (!(Test-Path $ProjectName))
{
    # プロジェクトフォルダがない場合作成
    dotnet.exe new console -n $ProjectName
}
Remove-Item $ProjectName/*.cs
Copy-Item $CSPath $ProjectName/
Set-Location $ProjectName
dotnet.exe publish -c Release -r win-x64 /p:PublishSingleFile=true --self-contained true -o ".."
Set-Location ..
Remove-Item ($ProjectName+".pdb")

使い方はRun-CS.psと同じです。

pdbは個人的に不要ですので削除しています。

コメント