我已将“System.dll”添加到编译器参数引用的程序集中。我还注意到将“使用系统”添加到 codeToCompile 或使用“System.Math”或“System.Double”工作正常。不知道出了什么问题。
using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Text;
using System.Windows.Forms;
private void onLoadPlugin(object sender, EventArgs e)
{
string codeToCompile =
@"
class TestPlugin
{
public string ArithmeticOperator
{
get { return ""X^2""; }
}
public double PerformCalculation(string value)
{
Double var = Double.Parse(value);
if (var == 0)
return 0;
return Math.Pow(var, 2);
}
}
";
CSharpCodeProvider provider = new CSharpCodeProvider();//new Dictionary<String, String> { { "CompilerVersion", "v4.0" } });
CompilerParameters parameters = new CompilerParameters();
parameters.ReferencedAssemblies.Add("System.dll");//This doesn't seem to be working
parameters.GenerateInMemory = false;
parameters.GenerateExecutable = false;
parameters.OutputAssembly = "TestPlugin.dll";
CompilerResults results = provider.CompileAssemblyFromSource(parameters, codeToCompile);
if (results.Errors.Count != 0)
throw new Exception("Mission Failed");
}