我想尽可能基于类生成XML Schema 做Xsd.exe tool。
E.g。 xsd.exe /type: typename /outputdir:c:\ assmeblyname
。
有没有办法通过使用.NET Framework中的类来代替使用独立工具?
我确信我已经看到有关任务引用或类似信息的信息 - 即程序化的东西 - 可用于代替某些独立实用程序,或者某些独立实用程序通过FCL或Microsoft API获取其功能。
答案 0 :(得分:1)
发现这看起来应该可以解决这个问题......
public static string GetSchema<T>()
{
XmlAttributeOverrides xao = new XmlAttributeOverrides();
AttachXmlAttributes(xao, typeof(T));
XmlReflectionImporter importer = new XmlReflectionImporter(xao);
XmlSchemas schemas = new XmlSchemas();
XmlSchemaExporter exporter = new XmlSchemaExporter(schemas);
XmlTypeMapping map = importer.ImportTypeMapping(typeof(T));
exporter.ExportTypeMapping(map);
using (MemoryStream ms = new MemoryStream())
{
schemas[0].Write(ms);
ms.Position = 0;
return new StreamReader(ms).ReadToEnd();
}
}
答案 1 :(得分:1)
这样做:
public string GetFullSchema() {
string @namespace = "yourNamespace";
var q = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsClass && t.Namespace == @namespace
select t;
XmlReflectionImporter importer = new XmlReflectionImporter(@namespace);
XmlSchemas schemas = new XmlSchemas();
XmlSchemaExporter exporter = new XmlSchemaExporter(schemas);
foreach (var x in q)
{
var map = importer.ImportTypeMapping(x);
exporter.ExportTypeMapping(map);
}
using (MemoryStream ms = new MemoryStream())
{
schemas[0].Write(ms);
ms.Position = 0;
return new StreamReader(ms).ReadToEnd();
}
}