Foros del Web » Programación para mayores de 30 ;) » .NET »

Compilando una clase desde codigo c#

Estas en el tema de Compilando una clase desde codigo c# en el foro de .NET en Foros del Web. Hola que tal, como estan espero que bien. Disculpen tengo una graaan duda. Como el nombre del tema lo indica, estoy intentado compilar codigo en ...
  #1 (permalink)  
Antiguo 16/01/2012, 18:50
 
Fecha de Ingreso: octubre-2010
Mensajes: 46
Antigüedad: 13 años, 6 meses
Puntos: 1
Exclamación Compilando una clase desde codigo c#

Hola que tal, como estan espero que bien.

Disculpen tengo una graaan duda.

Como el nombre del tema lo indica, estoy intentado compilar codigo en tiempo de ejecucion. Despues de investigar en varios lados, finalmente pude compilar uno de los ejemplos que vienen en la red. es el siguiente

using System;

namespace spacio
{
public class ClaseCalculo
{
public ClaseCalculo()
{ }
public int MiMetodo()
{
int i = 3; return i * 2;
}
}
}

Esta es la clase de prueba a compilar. Y la manera en la que la compilo e sla siguiente

CSharpCodeProvider csharpCodeProvider = new CSharpCodeProvider();
CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("C#");
CompilerParameters compilerParameters = new CompilerParameters();
compilerParameters.GenerateInMemory = false;
compilerParameters.GenerateExecutable = false;
compilerParameters.OutputAssembly = "...\\PruebaExportarClase.dll";
compilerParameters.ReferencedAssemblies.Add("Syste m.dll");
CompilerResults compilerResults = csharpCodeProvider.CompileAssemblyFromSource(compi lerParameters, caden);
if (compilerResults.Errors.HasErrors)
{
StringBuilder errores = null;
if (compilerResults.Errors.Count > 0)
{
errores = new StringBuilder();
foreach (CompilerError error in compilerResults.Errors)
{
errores.AppendLine(string.Format("Error en linea: {0}", error.Line));
errores.AppendLine("\t" + error.ErrorText);
}
}

}
Si ejecuto esto, to funciona muy bien, pero cuando manejo una msgbox dentro de la clase a compilar, me genera un error indicando que el tipo de la msgbox no existe.

Probe a tratar de agregar mas referencias en la clase

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace spacio
{
public class ClaseCalculo
{
public ClaseCalculo()
{ }
public int MiMetodo()
{
int i = { 0 }; return i * 2;
}
}
}

pero cuando lo compila me genera el eror de compilacion siguiente:

The type or namespace name 'Data' does not exist in the namespace 'System' (are you missing an assembly reference?)

Y asi para todas.

Alguien me podria decir el por que me genera este error???

No se si sea posible agregar ensamblados, o si me falta algun metodo, la verdad no se.

Agradezco de antemano la atencion

Buen dia
  #2 (permalink)  
Antiguo 16/01/2012, 19:28
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Compilando una clase desde codigo c#

Hola que tal, bueno una duda tu proyecto es Form o Consola??

El detalle es que si es consola, no existe el MensajeBox ( Bueno al menos yo no e podido mostrarlo ), para eso utiliza el Console.WriteLine.

  #3 (permalink)  
Antiguo 17/01/2012, 07:41
 
Fecha de Ingreso: agosto-2011
Mensajes: 59
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Compilando una clase desde codigo c#

Bueno no se muy bien que estás haciendo.
Pero el error "The type or namespace name 'Data' does not exist in the namespace 'System' (are you missing an assembly reference?)" significa using System.Data; no lo encuentra. Puede que te hayas equivocado al seleccionar el tipo de proyecto que estas eligiendo.

de todas formas prueba con la solución que dan en estas páginas
http://stackoverflow.com/questions/1275043/the-type-or-namespace-name-objects-does-not-exist-in-the-namespace-system-dat

http://jatindersingh.blogspot.com/2009/09/type-or-namespace-name-data-does-not.html
  #4 (permalink)  
Antiguo 17/01/2012, 10:42
 
Fecha de Ingreso: octubre-2010
Mensajes: 46
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Compilando una clase desde codigo c#

Hola que tal, muchas gracias por las respuestas. Lo que estoy haciendo es lo siguiente:

Accedo a una API de la red y obtengo un archivo XML de la misma. Posteriormente genero un XSD y finalmente en base a XSD creo una clase(La clase de la API)

Esa clase generada es la que deseo compilar dentro de mi proyecto y hacer referencias a sus metodos. El problema es que la clase puede tener o no usings(Solo usar System o usar mas), manejar msgox, etc etc etc. Ya la mande llamar mediante mi codigo que compila, pero me marca errores, principalmente eso de los Usings. Realmente no tengo que cargar ningun proyecto, solo esa clase.

Espero haberme dado a entender mejor, y pues agradezco la ayuda que me puedan dar. Saludos y gracias
  #5 (permalink)  
Antiguo 18/01/2012, 13:49
 
Fecha de Ingreso: octubre-2010
Mensajes: 12
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: Compilando una clase desde codigo c#

Hola, como sugerencia puedes probar lo siguiente, en el explorador de soluciones haz clic derecho sobre la clase, propiedades y en accion de compilacion cambiala a compilacion. de esta manera creas una clase compilable y puedes acceder a sus metodos y funciones, esto en el caso de los webForms. suerte...
  #6 (permalink)  
Antiguo 20/01/2012, 12:18
 
Fecha de Ingreso: octubre-2010
Mensajes: 46
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Compilando una clase desde codigo c#

Hola que tal, muchas grax por la respuesta. En fin de cuentas, lo unico que tenia que hacer era agregar las .dll mediante codigo al momento de querer compilar la clase. Gracias, ya resolvi mi problema :D:D:D
  #7 (permalink)  
Antiguo 29/03/2012, 09:43
 
Fecha de Ingreso: marzo-2012
Mensajes: 1
Antigüedad: 12 años
Puntos: 0
Respuesta: Compilando una clase desde codigo c#

Yo tengo el mismo problema que tu, pero podrias decirme como agregastes las .dll?

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:48.