Ответ 1
Самый простой способ - добавить запись глобального пространства имен в модуль компиляции (пространство имен без имени) и добавить к нему импорт.
В документации 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);
Самый простой способ - добавить запись глобального пространства имен в модуль компиляции (пространство имен без имени) и добавить к нему импорт.
Таким образом, код будет таким же, как раньше, но с добавленным битом.
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);