2010-05-04 7 views
15

? La documentación msdn dice agregar importaciones de espacios de nombres a la colección CodeNamespace.Imports. Esto los coloca en el interior del espacio de nombres (lo cual tiene sentido, ya que su ellas añadiendo al espacio de nombres)¿Hay alguna manera de que CodeDom use sentencias antes del espacio de nombres

namespace Foo 
{ 
    using Bar; 

    //Code 
} 

Sin embargo, el resto de nuestra base de código se utiliza declaraciones fuera del espacio de nombres:

using Bar; 

namespace Foo 
{ 
    //Code 
} 

¿Hay una Manera limpia para que CodeDom emita la segunda versión?

Editar: el código para producir el primer ejemplo se ve algo como esto:

CodeNamespace ns = new CodeNamespace("Foo"); 
ns.Imports.Add(new CodenamespaceImport("Bar")); 
CodeCompileUnit cu = new CodeCompileUnit(); 
cu.Namespaces.Add(ns); 
new CSharpCodeProvider().GenerateCodeFromCompileUnit(cu, Console.Out, null); 

Respuesta

22

La forma más sencilla es añadir una entrada de espacio de nombres global en la unidad de compilación (espacio de nombres sin nombre) y añadir las importaciones de eso.

+2

Sip. eso funciona. ¡Yay Necro responde! –

+0

gracias; Me he estado preguntando sobre esto ... un sincero +1 para la respuesta de Franken, y también +1 para el necrocomment spoooooky elogiando la respuesta necro. :) y + ♥♥ ya que es el momento adecuado para las necrófagas cosas misteriosas y los Frankenthings. ;) – shelleybutterfly

6

Así que el código sería el mismo que antes, pero con este bit añadió en.

CodeNamespace globalNamespace = new CodeNamespace(); 
globalNamespace.Imports.Add(new CodeNamespaceImport("Foo")); 

// globalNamespace.Comments = string.Empty; you cannot do this 
ccu.Namespaces.Add(globalNamespace); 
ccu.Namespaces.Add(ns); 
+0

el problema es que ahora tengo un bloque de comentarios generado automáticamente al principio – Brian

Cuestiones relacionadas