Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过.NET Framework类以编程方式使用XSD.exe工具功能(从类生成架构)?_.net_Xsd.exe_Fcl - Fatal编程技术网

通过.NET Framework类以编程方式使用XSD.exe工具功能(从类生成架构)?

通过.NET Framework类以编程方式使用XSD.exe工具功能(从类生成架构)?,.net,xsd.exe,fcl,.net,Xsd.exe,Fcl,我想根据类生成一个XML模式,正如您所能做的那样 用这个 例如,xsd.exe/type:typename/outputdir:c:\assmeblyname 有没有办法通过使用.NET Framework中的类而不是使用独立工具来做到这一点 我确信我已经看到了关于任务引用或类似的信息,即一些编程的信息,可以用来代替一些独立的实用程序,或者一些独立的实用程序通过FCL或Microsoft API获得其功能 找到了这个,看起来它应该会起作用 public static string GetSche

我想根据类生成一个XML模式,正如您所能做的那样 用这个

例如,
xsd.exe/type:typename/outputdir:c:\assmeblyname

有没有办法通过使用.NET Framework中的类而不是使用独立工具来做到这一点


我确信我已经看到了关于任务引用或类似的信息,即一些编程的信息,可以用来代替一些独立的实用程序,或者一些独立的实用程序通过FCL或Microsoft API获得其功能

找到了这个,看起来它应该会起作用

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();
        }
    }
公共静态字符串GetSchema()
{
XmlAttributeOverrides xao=新的XmlAttributeOverrides();
AttachXmlAttributes(xao,typeof(T));
XmlReflectionImporter导入器=新的XmlReflectionImporter(xao);
XmlSchemas=新的XmlSchemas();
XmlSchemaExporter exporter=新的XmlSchemaExporter(模式);
XmlTypeMapping map=importer.ImportTypeMapping(typeof(T));
exporter.ExportTypeMapping(地图);
使用(MemoryStream ms=new MemoryStream())
{
架构[0]。写入(毫秒);
ms.Position=0;
返回新的StreamReader(ms).ReadToEnd();
}
}
执行以下操作:

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();
        }

}

我不知道(作为一个带有
GenerateXsd()
方法的一次性类)。但是,您可以使用System.Reflection和System.Xml.Hmmmmm中的大量类来重新创建它。。。谢谢杰西克。有人知道互联网上有这种预先包装好的肘部润滑脂吗?不是你要找的,但是你可以把它包起来。如果它是一个.NET工具,您也可以引用exe,并选择代码。Google显示如下:。可能有帮助吗?完整代码位于: