Есть ли способ, чтобы CodeDom ставил использование операторов перед пространством имен

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

namespace Foo
{
  using Bar;

  //Code
}

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

using Bar;

namespace Foo
{
  //Code
}

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

Изменить: код для создания первого примера выглядит примерно так:

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

Ответы

Ответ 1

Самый простой способ - добавить запись глобального пространства имен в модуль компиляции (пространство имен без имени) и добавить к нему импорт.

Ответ 2

Таким образом, код будет таким же, как раньше, но с добавленным битом.

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