我已将“System.dll”添加到编译器参数引用的程序集中。我还注意到将“Using System”添加到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");
}
答案 0 :(得分:3)
使用“使用......”:
using System;
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);
}
}
或不使用“使用......”:
class TestPlugin
{
public string ArithmeticOperator
{
get { return ""X^2""; }
}
public double PerformCalculation(string value)
{
System.Double var = System.Double.Parse(value);
if (var == 0)
return 0;
return System.Math.Pow(var, 2);
}
}
答案 1 :(得分:1)
对于您在.net中使用的每个课程,您必须做两件事: 1)参考其装配 2)为其添加using语句,或键入完全限定名称,例如:System.Math
.net框架中的全局没有类,每个类都在某个程序集(Namespace)
中在代码顶部添加"using System;"
,如下所示:
string codeToCompile =
@"
using System;
class TestPlugin
{
.....
答案 2 :(得分:1)
System.Double
等基本类型位于mscorlib.dll
。
如果添加选项&#34; View Containers&#34;在对象浏览器中。
请注意,System.dll
和System.Core.dll
会向mscorlib.dll
中已存在的命名空间添加其他类型。因此,命名空间和DLL之间没有一对一的关系。
但默认情况下可能会添加mscorlib.dll
。如果您正在使用C#别名string
,double
,则可以在没有明确提及System
命名空间的情况下使用,但是您需要using System;
或者使用System.Double
来限定类型它(System.Math.Pow
,main
)。