2010-05-04 5 views
15

Документация msdn говорит, что добавление имён импорта в коллекцию CodeNamespace.Imports. Это ставит их в пространстве имен (что имеет смысл, так как ваши добавления их к пространству имен)Можно ли использовать CodeDom с использованием операторов перед пространством имен

namespace Foo 
{ 
    using Bar; 

    //Code 
} 

Однако остальная часть нашего кода база используя операторы вне пространства имен:

using Bar; 

namespace Foo 
{ 
    //Code 
} 

Есть чистый способ заставить CodeDom испускать вторую версию?

Edit: код для получения первого примера выглядит примерно так:

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

ответ

22

Самый простой способ, чтобы добавить глобальную запись имен в Compile Unit (пространство имен без имени) и добавить импорт в Это.

+2

Угу. это работает. Yay necro отвечает! –

+0

спасибо; Мне было интересно об этом ... сердечном +1 для Frankenanswer, а также +1 для ложного некромента, восхваляющего ответ некро. :) и + ♥♥, так как это подходящее время для жутких некровых вещей и Франклингов. ;) – shelleybutterfly

6

Так что код будет такой же, как и раньше, но с этим немного добавил.

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

проблема в том, что теперь у меня есть сгенерированный автоматически блок комментариев в начале – Brian

Смежные вопросы