当使用 CodeCompileUnit 通过 CodeDOM 生成代码时,您可以通过创建一个与定义类型的命名空间分开的 CodeNamespace 来导入命名空间。使用 Imports 属性允许您添加所需的名称空间。如果将 CodeNamespace 添加到 CodeCompile 单元,导入将出现在 CodeDOM 生成的文件的顶部。
例如,使用 CSharpCodeProvider 编译以下 CodeDOM 图:
CodeCompileUnit compileUnit = new CodeCompileUnit();
CodeNamespace importsNamespace = new CodeNamespace {Imports = {new CodeNamespaceImport("System"), new CodeNamespaceImport("System.Collections.Generic"), new CodeNamespaceImport("System.Linq")}};
CodeNamespace typeNamespace = new CodeNamespace("MyTypeNamespace");
compileUnit.Namespaces.Add(importsNamespace);
compileUnit.Namespaces.Add(typeNamespace);
会产生
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.269
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
namespace MyTypeNamespace {
}
CodeSnippetCompileUnit 允许您编译已作为字符串输入的类型定义。例如,字符串“public class TestClass {}”可以用作 CodeSnippetCompileUnit 的值。将与上面相同的代码与 CodeSnippetCompileUnit 一起使用:
const string testClassCodeString = "public class TestClass {}";
CodeSnippetCompileUnit snippetCompileUnit = new CodeSnippetCompileUnit {Value = testClassCodeString};
CodeNamespace importsNamespace = new CodeNamespace {Imports = {new CodeNamespaceImport("System"), new CodeNamespaceImport("System.Collections.Generic"), new CodeNamespaceImport("System.Linq")}};
CodeNamespace typeNamespace = new CodeNamespace("MyTypeNamespace");
compileUnit.Namespaces.Add(importsNamespace);
compileUnit.Namespaces.Add(typeNamespace);
将生成一个仅包含以下内容的文件:
public class TestClass {}
如何将此类型包含在命名空间中,或将命名空间导入从 CodeSnippetCompileUnit 生成的文件中?