0
点赞
收藏
分享

微信扫一扫

c#动态调用代码.NETCORE不支持CODEDOM


using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;

public void CallScriptFromText()
{
string code1 = @"
public class ScriptedClass
{
public string HelloWorld { get; set; }
public ScriptedClass()
{
HelloWorld = ""Hello cccccRoslyn!"";
}
public string exec()
{
return ""6666"";
}
}";

var script = CSharpScript.RunAsync(code1).Result;

var result = script.ContinueWithAsync<string>("new ScriptedClass().exec()").Result;
Console.WriteLine(result.ReturnValue);
}

注意下面的方法仅限于.NET4.8及以下的版本使用,.NET CORE不支持了

public string LoadModel()
{
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();

CompilerParameters cp = new CompilerParameters();

cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");

cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
CompilerResults cresult = objCSharpCodePrivoder.CompileAssemblyFromFile(cp, "Test.cs");

if (cresult.Errors.HasErrors)
{
foreach (CompilerError err in cresult.Errors)
{
MessageBox.Show(err.ErrorText);
}
}
else
{
通过反射,执行代码
Assembly asb = cresult.CompiledAssembly;
object obj = asb.CreateInstance("aichome.Test");
MethodInfo objMI = obj.GetType().GetMethod("Hello");
string res= objMI.Invoke(obj, new object[] { "测试代码" }).ToString();
return res;
}
return "";
}

 

举报

相关推荐

0 条评论