> 백엔드 개발 > C++ > .NET에서 런타임에 사용자 입력 코드를 어떻게 컴파일하고 실행할 수 있습니까?

.NET에서 런타임에 사용자 입력 코드를 어떻게 컴파일하고 실행할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-31 08:19:10
원래의
696명이 탐색했습니다.

How Can I Compile and Execute User-Inputted Code at Runtime in .NET?

.NET에서 런타임 코드 컴파일 및 실행

배경:

수학 표현식을 동적으로 평가하는 것은 여기서 주요 관심사가 아닙니다. . 목표는 .NET에서 런타임에 새 코드를 컴파일하고 실행하는 것입니다.

문제 설명:

사용자는 텍스트 상자에 방정식을 입력하고 들어오는 데이터 포인트('x'로 표시)에 적용되도록 합니다. 그들은 계산할 때마다 방정식 텍스트를 구문 분석하는 성능 오버헤드를 제거하는 솔루션을 찾고 있습니다.

제안된 솔루션:

해결책에는 방정식을 함수로 변환하는 작업이 포함됩니다. 한 번만 구문 분석하면 됩니다. 이는 ConvertEquationToCode()라는 메서드를 사용하여 방정식을 함수 포인터로 변환하여 구현할 수 있습니다.

.NET에서 코드 컴파일 및 실행:

컴파일하고 실행하려면 .NET의 새로운 코드에서는 Microsoft.CSharp, System.CodeDom.Compiler 및 System.Reflection과 같은 라이브러리를 사용할 수 있습니다. 다음은 클래스(SomeClass)를 메서드(Add42)로 컴파일한 후 해당 메서드를 호출하는 프로세스를 보여주는 예입니다.

using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Reflection;

namespace RuntimeCompilationTest {
    class Program {
        static void Main(string[] args) {
            // Define the source code for the class with a method
            string sourceCode = @"
                public class SomeClass {
                    public int Add42 (int parameter) {
                        return parameter += 42;
                    }
                }";
            
            // Set up compiler parameters
            var compParms = new CompilerParameters {
                GenerateExecutable = false,
                GenerateInMemory = true
            };
            
            // Create the code provider and compile the source code
            var csProvider = new CSharpCodeProvider();
            CompilerResults compilerResults = csProvider.CompileAssemblyFromSource(compParms, sourceCode);
            
            // Create an instance of the compiled class
            object typeInstance = compilerResults.CompiledAssembly.CreateInstance("SomeClass");
            
            // Get the method info and invoke the method
            MethodInfo mi = typeInstance.GetType().GetMethod("Add42");
            int methodOutput = (int)mi.Invoke(typeInstance, new object[] { 1 });
            
            // Display the method output
            Console.WriteLine(methodOutput);
            Console.ReadLine();
        }
    }
}
로그인 후 복사

이 예는 NET에서 런타임 시 새 코드를 컴파일하고 실행하는 핵심 개념을 보여줍니다. 그물. 앞서 언급한 네임스페이스와 메소드를 활용하면 사용자 입력이나 기타 런타임 조건을 기반으로 사용자 정의 함수를 동적으로 생성하고 호출할 수 있습니다.

위 내용은 .NET에서 런타임에 사용자 입력 코드를 어떻게 컴파일하고 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿