<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentarios en: Decidir clase en tiempo de ejecución en .NET.</title>
	<atom:link href="http://www.albertmata.net/2008/12/decidir-clase-en-tiempo-de-ejecucion-en-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.albertmata.net/2008/12/decidir-clase-en-tiempo-de-ejecucion-en-net/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=decidir-clase-en-tiempo-de-ejecucion-en-net</link>
	<description>// anotaciones de análisis y programación en mi día a día como consultor de software</description>
	<lastBuildDate>Mon, 26 Oct 2009 17:21:23 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Por: Albert Mata</title>
		<link>http://www.albertmata.net/2008/12/decidir-clase-en-tiempo-de-ejecucion-en-net/comment-page-1/#comment-264</link>
		<dc:creator>Albert Mata</dc:creator>
		<pubDate>Wed, 17 Dec 2008 07:53:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=161#comment-264</guid>
		<description>Caramba, qué interesante... Haré pruebas con ello, sí señor. ¡Gracias!

Por cierto, no sé por qué tu comentario quedó en espera de aprobación, sorry.</description>
		<content:encoded><![CDATA[<p>Caramba, qué interesante... Haré pruebas con ello, sí señor. ¡Gracias!</p>
<p>Por cierto, no sé por qué tu comentario quedó en espera de aprobación, sorry.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Luis Medel</title>
		<link>http://www.albertmata.net/2008/12/decidir-clase-en-tiempo-de-ejecucion-en-net/comment-page-1/#comment-263</link>
		<dc:creator>Luis Medel</dc:creator>
		<pubDate>Wed, 17 Dec 2008 07:42:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.albertmata.net/?p=161#comment-263</guid>
		<description>Si quieres, puedes ir un poco más lejos y añadir soporte para &quot;scripts&quot; en tu aplicacon. Así aligeras un poco la ejecución por no tener cargado todo en cada momento. Es muuuuy útil.

Por si te interesa, te pego el código (algo modificado, para que tenga sentido) de un cargador dinámico que hice para un raytracer que escribí en C#.

&lt;code&gt;
// Una clase cualquira que nos va a servir para localizar el Assembly
Scene cls = new Clase ();
Assembly me = cls.GetType ().Assembly;

CompilerParameters parms = new CompilerParameters();
parms.GenerateExecutable = false;
parms.GenerateInMemory = true;
parms.IncludeDebugInformation = false;

// Añadimos las referencias necesarias
parms.ReferencedAssemblies.Add (&quot;System.dll&quot;);
parms.ReferencedAssemblies.Add (&quot;System.Drawing.dll&quot;);
parms.ReferencedAssemblies.Add (me.Location);

ICodeCompiler compiler = CodeDomProvider.CreateProvider (&quot;CSharp&quot;).CreateCompiler ();
CompilerResults results = compiler.CompileAssemblyFromSource (parms, STRING_CON_EL_CODIGO_FUENTE);

if (results.Errors.Count == 0)
{
	Assembly asm = results.CompiledAssembly;
	// Devolvemos una instancia de la clase NOMBRE_DE_CLASE_DESEADA
	return asm.CreateInstance (&quot;NOMBRE_DE_CLASE_DESEADA&quot;, true);
}

foreach (CompilerError cerr in results.Errors)
{
	Console.WriteLine (cerr.ErrorText);
}
return null;
&lt;/code&gt;

STRING_CON_EL_CODIGO_FUENTE y NOMBRE_DE_CLASE_DESEADA creo que son autoexplicativos ;)</description>
		<content:encoded><![CDATA[<p>Si quieres, puedes ir un poco más lejos y añadir soporte para "scripts" en tu aplicacon. Así aligeras un poco la ejecución por no tener cargado todo en cada momento. Es muuuuy útil.</p>
<p>Por si te interesa, te pego el código (algo modificado, para que tenga sentido) de un cargador dinámico que hice para un raytracer que escribí en C#.</p>
<p><code><br />
// Una clase cualquira que nos va a servir para localizar el Assembly<br />
Scene cls = new Clase ();<br />
Assembly me = cls.GetType ().Assembly;</p>
<p>CompilerParameters parms = new CompilerParameters();<br />
parms.GenerateExecutable = false;<br />
parms.GenerateInMemory = true;<br />
parms.IncludeDebugInformation = false;</p>
<p>// Añadimos las referencias necesarias<br />
parms.ReferencedAssemblies.Add ("System.dll");<br />
parms.ReferencedAssemblies.Add ("System.Drawing.dll");<br />
parms.ReferencedAssemblies.Add (me.Location);</p>
<p>ICodeCompiler compiler = CodeDomProvider.CreateProvider ("CSharp").CreateCompiler ();<br />
CompilerResults results = compiler.CompileAssemblyFromSource (parms, STRING_CON_EL_CODIGO_FUENTE);</p>
<p>if (results.Errors.Count == 0)<br />
{<br />
	Assembly asm = results.CompiledAssembly;<br />
	// Devolvemos una instancia de la clase NOMBRE_DE_CLASE_DESEADA<br />
	return asm.CreateInstance ("NOMBRE_DE_CLASE_DESEADA", true);<br />
}</p>
<p>foreach (CompilerError cerr in results.Errors)<br />
{<br />
	Console.WriteLine (cerr.ErrorText);<br />
}<br />
return null;<br />
</code></p>
<p>STRING_CON_EL_CODIGO_FUENTE y NOMBRE_DE_CLASE_DESEADA creo que son autoexplicativos <img src='http://www.albertmata.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>
