Pregunta

Estoy tratando de incluir una clase estática de métodos de extensión en un ensamblaje generado dinámicamente, excepto que sigo obteniendo un error de compilador de 'tipo de tipo' en la línea 6, columna 28, lo que sucede en la palabra 'esto'.Si quito 'Esto' no se devuelve ningún error (pero entonces no es un método de extensión).

 public static void CodeDomDooDad()
    {
        using (var provider = new CSharpCodeProvider())
        {
            var compilerParameters = new CompilerParameters();

            compilerParameters.ReferencedAssemblies.Add("system.dll");
            compilerParameters.CompilerOptions = "/t:library";
            compilerParameters.GenerateInMemory = true;

            var sb = new StringBuilder();

            sb.Append("namespace MooCow \n{ \n");
            sb.Append("public static class Extensions {\n");
            sb.Append("public static string ToMoo(this string s) {\n");
            sb.Append("return s.Replace(\" \",\"moo\");\n");
            sb.Append("}\n");
            sb.Append("}\n");
            sb.Append("}\n");

            //Console.WriteLine(sb.ToString());

            var cr = provider.CompileAssemblyFromSource(compilerParameters, sb.ToString());
            if (cr.Errors.Count > 0)
            {
                CompilerError error = cr.Errors[0];
                Console.WriteLine(
                    "error:"+error.ErrorText + 
                    " line:" +error.Line + 
                    " col:" +error.Column + 
                    " isWarning:" + error.IsWarning);
            }
        }
    }

Este es el código generado, que funciona bien.

namespace MooCow {
public static class Extensions
{
    public static string ToMoo(this string s)
    {
        return s.Replace(" ", "moo");
    }
}

}

¿Fue útil?

Solución

Creo que me enteré, tuvo que agregar compileraversion a CSHARPPROVIDER CONSTRUCTOR ... VAR PROVIDOR= NUEVO CSHARPCODEPROVIDER (nuevo Diccionario () {{"compilerversion", "v3.5"}})

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top