使用CodeCompileUnit通过CodeDOM生成代码时,可以通过创建与您定义类型的命名空间分开的CodeNamespace来导入命名空间。使用Imports属性可以添加你想要的命名空间。如果将CodeNamespace添加到CodeCompile单元,则导入将显示在由CodeDOM生成的文件的顶部。在CodeSnippetCompileUnit中导入命名空间
例如,使用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的值。
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使用相同的代码如上一个CodeSnippetCompileUnit?
您已经在使用逐字字符串,所以我认为实际的新行会比你的{2}更好。 – svick 2012-07-19 01:06:27
你是对的。在这种情况下,它可能会提高代码示例的可读性。根据您的建议更新。 – bozalina 2012-07-19 14:58:33