我使用System.Data.Design.TypedDataSetGenerator
將.xsd
文件(由VS2008生成)轉換爲與.NET 2.0兼容的強類型DataSet
類。從我從MSDN明白了,HierarchicalUpdate
option必須指定得到相同的結果是VS2008 IDE生成:TypedDataSetGenerator忽略HierarchicalUpdate選項?
HierarchicalUpdate - 生成類型有一個TableAdapterManager和實現分層更新相關方法的數據集。
所以我指定該選項,你可以在下面的代碼中看到,但輸出的.Designer.cs
文件不包含TableAdapterManager
......它甚至沒有任何TableAdapters
! VS2008有它自己的內部使用的Typed DataSet生成器,還是我錯過了一些東西,或者這是一個.NET錯誤?
string schemaContent;
using (StreamReader reader = new StreamReader(@"C:\CVS\CallRetrieverPlain\CallRetrieverPlain\CallRecordingsDataSet.xsd"))
{
schemaContent = reader.ReadToEnd();
}
string output = string.Empty;
using (CSharpCodeProvider cscp = new CSharpCodeProvider())
{
CodeCompileUnit ccu = new CodeCompileUnit();
CodeNamespace cn = new CodeNamespace("DataSet.Generation.Test");
output = TypedDataSetGenerator.Generate(schemaContent, ccu, cn, cscp,
TypedDataSetGenerator.GenerateOption.HierarchicalUpdate);
using (StringWriter codeWriter = new StringWriter())
{
// *** this line causes full generation as expected ***
cscp.GenerateCodeFromNamespace(cn, codeWriter, null);
cscp.GenerateCodeFromCompileUnit(ccu, codeWriter, null);
output = codeWriter.ToString();
}
}
using (StreamWriter writer = new StreamWriter(@"C:\test-tmp\CallRecordingsDataSet.Designer.cs"))
{
writer.Write(output);
}
編輯:周圍多一點玩,發現我必須添加一個調用CodeDomProvider.GenerateCodeFromNamespace()
以及CodeDomProvider.GenerateCodeFromCompileUnit()
(在上面的代碼註釋)。它現在完美運行!