c# - 从 codedom 生成的 dll 触发事件 - 如何从主 exe 应用程序中加入运行时生成的 dll 的事件
问题描述
string[]
我有一些用于计算的用户输入。我想编译它们并获得比任何其他方法更快的计算。
用户输入字符串:
double _1 = 2 + 2;
double _2 = _1 + Get_Variable("var1");
return _2;
我将输入转换为适合生成 dll 的字符串
namespace namespace_Calculator
{
public class Class_Calculator
{
public static double Start_Calculating()
{
//user defined string[] type calculation inputs
double _1 = 2 + 2;
double _2 = _1 + Get_Variable("var1");
return _2;
//user defined string[] type calculation inputs
}
}
}
如何Get_Variable()
从主 exe 返回函数?我目前正在使用DataTable().Compute()
我可以Start_Calculating()
在没有变量的情况下调用并获得结果。
object[] p = new object[] { };
Assembly yeni = AppDomain.CurrentDomain.Load(File.ReadAllBytes(Dll_location));
Type t = yeni.GetType("namespace_Calculator.Class_Calculator");
MethodInfo mi = t.GetMethod("Start_Calculating");
object ins = Activator.CreateInstance(t);
double cevap = (double)mi.Invoke(ins, p);
提前致谢。
解决方案
解决方案比看起来容易。
- 在 .exe 文件 codeDom 端:
将“Name.exe”添加到 CompilerParameters.ReferencedAssemblies 对象就足够了。
CompilerParameters options = new CompilerParameters();
...
options.ReferencedAssemblies.Add(AppDomain.CurrentDomain.FriendlyName);
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerResults results = provider.CompileAssemblyFromSource(options, SourceCode);
- 在 .exe 文件可调用函数方面:
创建标准的静态公共函数
namespace ns_Callable
{
public class cl_Callable
{
public static double Get_Variable(string Input)
{
return 0;
}
}
}
- 在新创建的 .dll 文件方面:
没什么特别的
namespace namespace_Calculator
{
public class Class_Calculator
{
public static double Start_Calculating()
{
//user defined string[] type calculation inputs
double _1 = 2 + 2;
double _2 = _1 + ns_Callable.cl_Callable.Get_Variable("var1");
return _2;
//user defined string[] type calculation inputs
}
}
}