using Microsoft.CodeAnalysis.CSharp.Scripting;

using Microsoft.CodeAnalysis.Scripting;

using System;

using System.Reflection;

using System.Threading.Tasks;


public static class Program

{

public static int i = 99;


[STAThread]

static async Task Main()

{

Console.WriteLine(i);

_ = await CSharpScript.RunAsync($"Program.i = 123", options);

Console.WriteLine(i);

}


static readonly ScriptOptions options = ScriptOptions.Default.AddReferences(Assembly.GetExecutingAssembly());

}


(관련 라이브러리 Nuget 필요.)


스크립트 처리옵션으로 현 어셈블리정보를 넘겨주면 dotnet script 처럼 런타임에서 현 프로젝트전체를 동적처리할수 있게된다.

혹은 매서드의 global~ 파라미터로 특정 객체를 넣어 해당 객체만 바로 접근가능하게만들거나

타입값을 넣어 해당 타입의 static맴버에 바로접근할수있게만 할수도 있다.


활용하면 기존 프로젝트에다가 내장콘솔이나, REPL, RPC 등의 동적 처리를 구현하는데 간단하면서도 엄청난 자유도와 유연성 확장성을 부여할수 있을진데,

정립이 덜됬던 때인것인지, 구글링 했을때 예제들이 죄다 쓸데없이 장황하고 돌아가는게 없어서 반년넘게 알아내는데 애로사항이 심각했음.


그외 Script객체와 ScriptState객체의 특징 분석&활용 연구 필요


검색 키워드 태그 추가 : Shell CLI CommandLine console prompt cmd roslyn 콘솔 프롬프트