C#CodeProvider错误:找不到类型的构造函数

时间:2016-11-26 23:00:36

标签: c#

我收到错误:类型' SimpleScript.Generator'上的构造函数没找到。

我尝试传递正确的参数,但我仍然收到此错误,这是我的源代码,脚本是一段非常简单的代码,用于生成Element头部和主体的数组。并且它也被成功编译,但它会在执行行引发错误。

string source = @"

using System;
using MSiteDLL;
namespace SimpleScript
{
    public static class Generator
    {
        public static Document Generate(Data server)
        {
            "+script+ @"
                    Block[] blocks = {
                    new Block(""head"", head),
                    new Block(""body"", body),
                    };
            return new Document(blocks);
        } 
    }
}

";
            Dictionary<string, string> providerOptions = new Dictionary<string, string>
                {
                    {"CompilerVersion", "v4.0"}
                };
            CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);

            CompilerParameters compilerParams = new CompilerParameters
            {
                GenerateInMemory = true,
                GenerateExecutable = false,
                ReferencedAssemblies = {
        "System.dll",
        "System.Core.dll",
        "MSiteDLL.dll",
    }
            };

            CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);

            if (results.Errors.Count != 0)
            {
                string output = "";
                foreach (CompilerError y in results.Errors)
                {
                    output += y.ErrorText + Environment.NewLine;
                }
                throw new Exception("Compile failed:" + output);
            }
            object o = results.CompiledAssembly.CreateInstance("SimpleScript.Generator");
            MethodInfo mi = o.GetType().GetMethod("Generate");
            Data[] parametersArray = new Data[] { server };
            Document x = (Document)mi.Invoke(o, parametersArray);
            return x;

1 个答案:

答案 0 :(得分:3)

由于您的类是静态的,因此您应该以静态方式调用该方法。 首先,删除这一行:

object o = results.CompiledAssembly.CreateInstance("SimpleScript.Generator");

并使用它们来调用:

MethodInfo mi = Type.GetType("SimpleScript.Generator").GetMethod("Generate");
Data[] parametersArray = new Data[] { server };
Document x = (Document)mi.Invoke(null, parametersArray);