2013-02-06 60 views
0

我從XSD文件生成對象和類es。但是這些類是在一個名稱空間下創建的,而不是XSD的目標名稱空間。 如何編譯模式,並且該類應該在命名空間下生成?編譯XSD到C#對象包括命名空間

這裏是我的代碼脫穎而出例如:

// generate an assembly representing the given schema: 
var codeNamespace = new CodeNamespace(namespaceName); 
var codeProvider = new CSharpCodeProvider(); 
var codeGenerationOptions = new CodeGeneratorOptions(); 
using (var writer = new StringWriter()) 
{ 
    codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, 
              codeGenerationOptions); 
    code = writer.ToString(); 
} 
+0

如何從XSD生成類?使用xsd.exe? – ken2k

+1

通過「XSD的目標命名空間」,您可以*不*意指在XSD文件中指定爲目標命名空間的命名空間,對吧? (該名稱空間與.NET名稱空間有很大不同,如果不指定實際使用的轉換機制,它的名稱可能無法轉換) –

+0

在模式中,我設置了目標名稱空間,並且希望生成的類應該具有此名稱空間。我該怎麼做? – user625243

回答

0

你的代碼示例工程,它使得生成的代碼中,你在你的namespaceName變量指定的命名空間。如果您希望命名空間與XSD匹配,則可以相應地設置namespaceName變量。

例如,如果我在示例代碼中定義了string namespaceName = "My.Namespace.One";,則按預期得到的代碼值爲"namespace My.Namespace.One {\r\n\r\n}"

因此,您只需從您的XSD讀取命名空間並將其分配到namespaceName如果您的問題是您想要使用多個命名空間,那麼問題與您如何處理用於代碼生成的XSD相關在您的示例中完全不顯示。

但是爲了實際編譯您生成的代碼,命名空間需要符合C#限制。類似http://schemas.microsoft.com/winfx/2006/xaml的命名空間不會在C#中編譯。該命名空間可能(我不確定)在IL字節代碼級別是否有效,但即使它是我真的想知道你在做什麼值得花費這種努力,特別是考慮到這將是一個痛苦讓C#使用生成的程序集。

我有這樣的感覺,你的問題/示例中可能缺少一些細節,這可能不是你正在尋找的信息;不過,我相信這個答案與你所提供的一致。