2010-05-04 7 views
15

La documentation msdn indique l'ajout d'importations d'espaces de noms à la collection CodeNamespace.Imports. Ce qui les met à l'intérieur de l'espace de noms (ce qui est logique, puisque votre en les ajoutant à l'espace de noms)Existe-t-il un moyen pour que CodeDom utilise des instructions avant l'espace de noms?

namespace Foo 
{ 
    using Bar; 

    //Code 
} 

Cependant, le reste de notre base de code a l'aide d'instructions en dehors de l'espace de noms:

using Bar; 

namespace Foo 
{ 
    //Code 
} 

Y at-il un moyen propre à obtenir CodeDom pour émettre la deuxième version?

Edit: le code pour produire le premier exemple ressemble à ceci:

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); 

Répondre

22

La façon la plus simple est d'ajouter une entrée globale d'espace de noms dans l'unité Compile (espace de noms sans nom) et ajoutez les importations il.

+2

Eh oui. ça marche. Yay necro réponses! –

+0

merci; Je m'étais demandé à ce sujet ... un +1 sincère pour le Frankenanswer, et aussi +1 pour le necrocomment spoooooky louant la réponse necro. :) et + ♥♥ puisque c'est le bon moment pour des trucs necro fantasmagoriques et Frankenthings. ;) – shelleybutterfly

6

Ainsi, le code serait le même que précédemment mais avec ce bit ajouté.

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

le problème est que maintenant j'ai un bloc de commentaire généré automatiquement au début – Brian