Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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运行时编译错误:在当前上下文中找不到或不存在类型“Double”和“Math”_C#_.net_Visual Studio_Compiler Errors_Runtime Compilation - Fatal编程技术网

C# C运行时编译错误:在当前上下文中找不到或不存在类型“Double”和“Math”

C# C运行时编译错误:在当前上下文中找不到或不存在类型“Double”和“Math”,c#,.net,visual-studio,compiler-errors,runtime-compilation,C#,.net,Visual Studio,Compiler Errors,Runtime Compilation,我已将System.dll添加到编译器参数引用的程序集。我还注意到,将Using System添加到codeToCompile或Using System.Math或System.Double可以正常工作。不确定出了什么问题 using Microsoft.CSharp; using System; using System.CodeDom.Compiler; using System.Text; using System.Windows.Forms;

我已将System.dll添加到编译器参数引用的程序集。我还注意到,将Using System添加到codeToCompile或Using 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");


    }

对于在.net中使用的每个类,您必须做两件事: 1参考其组件 2为其添加using语句,或键入完全限定的名称,例如:System.Math

在.net framework的全局中没有类,每个类都在某个程序集命名空间中

增加使用系统;在代码的顶部,您可以这样做:

string codeToCompile =
     @"
using System;
class TestPlugin
{
.....

对于在.net中使用的每个类,您必须做两件事: 1参考其组件 2为其添加using语句,或键入完全限定的名称,例如:System.Math

在.net framework的全局中没有类,每个类都在某个程序集命名空间中

增加使用系统;在代码的顶部,您可以这样做:

string codeToCompile =
     @"
using System;
class TestPlugin
{
.....
基本类型如System.Double在mscorlib.dll中

如果在对象浏览器中添加“视图容器”选项,则可以看到

请注意,System.dll和System.Core.dll会向mscorlib.dll中已有的名称空间添加其他类型。因此,名称空间和DLL之间没有1对1的关系

但默认情况下可能会添加mscorlib.dll。如果您使用的是C别名字符串double,那么不需要显式地提到系统名称空间就可以了,但是您需要一个使用系统;或者使用it System.Double、System.Math.Pow来限定类型。

基本类型如System.Double在mscorlib.dll中

如果在对象浏览器中添加“视图容器”选项,则可以看到

请注意,System.dll和System.Core.dll会向mscorlib.dll中已有的名称空间添加其他类型。因此,名称空间和DLL之间没有1对1的关系

但默认情况下可能会添加mscorlib.dll。如果您使用的是C别名字符串double,那么不需要显式地提到系统名称空间就可以了,但是您需要一个使用系统;或者使用it System.Double、System.Math.Pow.

使用…:

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);
    }
}
或者不使用…:

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);
    }
}
使用…:

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);
    }
}
或者不使用…:

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);
    }
}


试着用谷歌搜索准确的错误你至少试过了吗…?试过了。发现一对类型“Double”和“Math”在当前上下文错误中找不到/不存在,但与运行时编译无关。使用…添加怎么样。。。;使用。。。;到codeToCompile?你在类标题中的使用部分是什么样子的?你能编辑你的代码并向我们展示吗。。?看看这篇使用.AddRange vs.Add函数的文章,试试谷歌搜索确切的错误你至少试过了吗?试过了。发现一对类型“Double”和“Math”在当前上下文错误中找不到/不存在,但与运行时编译无关。使用…添加怎么样。。。;使用。。。;到codeToCompile?你在类标题中的使用部分是什么样子的?你能编辑你的代码并向我们展示吗。。?看看这篇文章,它使用了.AddRange和.Add函数,就像我说的,这样做很好。。我只是想知道为什么这样做:parameters.referencedsassemblies.AddSystem.dll不起作用您只需添加System.dll,但必须同时调用System.Double而不是Double。因为名称空间。如果您没有使用系统;只叫替身,替身在哪里?没有替身,只有系统。替身。你说得对。但我相信使用parameters.ReferencedAssemblys.Add是直接在代码中执行的替代方法。@user3845413不,不是,请自己尝试,自己尝试,创建新项目,使用VS向导添加对某个程序集的引用,然后尝试调用该程序集的类而不使用,即使您已经添加了引用,您也会看到它在抱怨。正如我所说,这样做很好。。我只是想知道为什么这样做:parameters.referencedsassemblies.AddSystem.dll不起作用您只需添加System.dll,但必须同时调用System.Double而不是Double。因为名称空间。如果您没有使用系统;只叫替身,替身在哪里?没有替身,只有系统。替身。你说得对。但我相信使用parameters.ReferencedAssemblys.Add是直接在代码中执行的替代方法。@user3845413不,不是,请自己尝试,自己尝试,创建新项目,使用VS向导添加对某个程序集的引用,然后尝试调用该程序集的类而不使用,即使您已经添加了引用,您也会看到它抱怨。已尝试使用它参数。ReferencedAssemblys.Addmscorlib.dll;未工作尝试了它的参数。ReferencedAssemblys.Addmscorlib.dll;不起作用,正如我所说的那样,效果很好。为什么:parameters.ReferencedAssemblys.AddSystem.dll不起作用?这就像只添加一个assembly System.dll,而忘记使用System编写;->VS2015
将显示红色。。。编译器错误。。。尝试创建新项目,在其中添加System.dll,并且不要使用System;->无法编译。在System.dll中有System.Double和System.Math,但不是Double和Math,正如我所指出的那样,它们工作正常。为什么:parameters.ReferencedAssemblys.AddSystem.dll不起作用?这就像只添加一个assembly System.dll,而忘记使用System编写;->VS2015将显示为红色。。。编译器错误。。。尝试创建新项目,在其中添加System.dll,并且不要使用System;->无法编译。在System.dll中有System.Double和System.Math,但没有Double和Math