有没有办法让CodeDom在命名空间之前使用语句

Jos*_*ing 17 .net c# codedom

msdn文档说添加名称空间导入到CodeNamespace.Imports集合.这将它们放在命名空间内(这是有意义的,因为您将它们添加到命名空间)

namespace Foo
{
  using Bar;

  //Code
}
Run Code Online (Sandbox Code Playgroud)

但是,我们的代码库的其余部分使用命名空间之外的语句:

using Bar;

namespace Foo
{
  //Code
}
Run Code Online (Sandbox Code Playgroud)

是否有一种干净的方式让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);
Run Code Online (Sandbox Code Playgroud)

小智 22

最简单的方法是将全局命名空间条目添加到编译单元(没有名称的命名空间)中,并将导入添加到其中.


Bri*_*ian 8

因此代码将与之前相同,但添加了此位.

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);
Run Code Online (Sandbox Code Playgroud)