使用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