Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串转换为代码隐藏中的可执行c#代码_C#_Asp.net_Webforms - Fatal编程技术网

将字符串转换为代码隐藏中的可执行c#代码

将字符串转换为代码隐藏中的可执行c#代码,c#,asp.net,webforms,C#,Asp.net,Webforms,可能重复: 如何执行此字符串: string dt = "DateTime.Now"; …这样会显示今天的日期吗?: lbl.Text = dt; 使用Codedom的解决方案: private static string CreateExecuteMethodTemplate(string content) { var builder = new StringBuilder(); builder.Append("using System;"); builder.

可能重复:

如何执行此字符串:

string dt = "DateTime.Now";
…这样会显示今天的日期吗?:

lbl.Text = dt;
使用Codedom的解决方案:

private static string CreateExecuteMethodTemplate(string content)
{
    var builder = new StringBuilder();

    builder.Append("using System;");
    builder.Append("\r\nnamespace Lab");
    builder.Append("\r\n{");
    builder.Append("\r\npublic sealed class Cal");
    builder.Append("\r\n{");
    builder.Append("\r\npublic static object Execute()");
    builder.Append("\r\n{");
    builder.AppendFormat("\r\nreturn {0};", content);
    builder.Append("\r\n}");
    builder.Append("\r\n}");
    builder.Append("\r\n}");

    return builder.ToString();
}

private static object Execute(string content)
{
    var codeProvider = new CSharpCodeProvider();
    var compilerParameters = new CompilerParameters
    {
        GenerateExecutable = false,
        GenerateInMemory = true
    };

    compilerParameters.ReferencedAssemblies.Add("system.dll");

    string sourceCode = CreateExecuteMethodTemplate(content);
    CompilerResults compilerResults = codeProvider.CompileAssemblyFromSource(compilerParameters, sourceCode);
    Assembly assembly = compilerResults.CompiledAssembly;
    Type type = assembly.GetType("Lab.Cal");
    MethodInfo methodInfo = type.GetMethod("Execute");

    return methodInfo.Invoke(null, null);
}
所以你可以打电话:

var result = Execute("DateTime.Now");