天道酬勤,学无止境

通过 .NET Framework 类以编程方式使用 XSD.exe 工具功能(从类生成架构)?(Programmatically use XSD.exe tool feature (generate schema from class) through .NET Framework classes?)

问题

我想根据类生成 XML 架构,就像您可以使用 Xsd.exe 工具一样。

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

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

我确信我已经看到有关任务引用或类似的信息——即一些编程的东西——可以用来代替这些独立的实用程序中的一些,或者一些独立的实用程序通过 FCL 或 Microsoft API 获得它们的功能。

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

做这个:

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

}
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 通过 .NET Framework 类以编程方式使用 XSD.exe 工具功能(从 XSD 架构生成类)?(Programmatically use XSD.exe tool feature (generate class from XSD Schema) through .NET Framework classes?)
    问题 我想从 XML XSD Schema 生成一个类,就像使用 Xsd.exe 工具一样。 例如XSD.exe /namespace:Generated.Xsd_1 /classes /outputdir:..\Classes 有没有办法通过使用 .NET Framework 中的类而不是使用独立工具来做到这一点? 回答1 无耻地从这里借来的: using System; using System.IO; using System.Collections.Generic; using System.Reflection; using System.Text; using System.Xml; using System.Xml.Serialization; using System.Xml.Schema; using System.CodeDom; using System.CodeDom.Compiler; using Microsoft.CSharp; using NUnit.Framework; namespace XmlSchemaImporterTest { [TestFixture] public class XsdToClassTests { // Test for XmlSchemaImporter [Test] public void
  • .NET 2.0 SDK程序-每个工具做什么?(The .NET 2.0 SDK Programs - What does each tool do?)
    问题 我的问题很简单。 他们在做什么? 下面的可接受答案是框架中附带的.NET SDK工具的列表。 回答1 该答案涵盖了简短的描述,并提供了所有.NET SDK工具的链接。 如果您有其他任何信息,或者知道缺少任何工具,请随时进行编辑。 al.exe-程序集链接器从一个或多个模块或资源文件中生成带有程序集清单的文件。 模块是没有汇编清单的Microsoft中间语言(MSIL)文件。 如果您具有一个或多个模块(不带清单的元数据),则可以使用此模块创建一个清单,且清单在单独的文件中。 apatch.exe-使用Delta压缩API,并且专门使用PE文件的知识来改善压缩技术。 它是Windows安装程序技术的一部分。 优点:比发布新的DLL小; 仅当受众具有原始DLL时,此修补程序才有用。 因此,您可以自由发布补丁程序,而不必担心盗版。 aspnet_merge.exe-使用ASP.NET Merge工具可以组合和管理由ASP.NET编译工具(Aspnet编译器)创建的程序集。 ASP.NET合并工具可用于通过使用ASP.NET 2.0版或更高版本创建的程序集。 这样就可以进行以下操作:为整个网站创建一个程序集; 为每个网站文件夹创建一个程序集,并在程序集名称中添加一个前缀; 仅为网站用户界面(UI)元素(例如页面和控件)创建单个程序集。 AxImp.exe
  • Visual Studio命令提示符与常规命令提示符?(Visual Studio Command Prompt vs. a regular command prompt?)
    问题 当我打开Visual Studio命令提示符时(例如,使用菜单“开始” ->“程序” ->“ Microsoft Visual Studio 2008” ->“ Visual Studio工具” ->“ Visual Studio 2008命令提示符”打开),我得到: Setting environment for using Microsoft Visual Studio 2008 x86 tools. C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE> 有哪些工具可用,此命令提示符最常使用的是什么? 回答1 基本上,它只是将几个Visual Studio二进制位置设置到该命令窗口实例的PATH环境变量中。 这意味着您可以使用所有各种命令和工具,而不必包括完整路径。 .NET Framework工具和工具(.NET Framework)中的MSDN上提供了部分工具的部分列表。 回答2 Visual Studio命令提示符是访问.NET Framework SDK以及Windows Platform SDK工具(如果已安装)的命令行工具的便捷方式。 通过提供Visual Studio命令提示符,Microsoft允许您运行这些工具,而无需您的PATH,INCLUDE
  • 如何在C#中以编程方式创建XSD文件?(How to create XSD file programmatically in C#?)
    问题 我有一个 xml 文件(我使用 XmlDocument 在 c# 中创建的),现在我必须在 C# 中以编程方式创建对应于它的 xsd 文件......我该怎么做? 我可以使用相同的类来创建xml文件吗? 还是有其他我应该使用的类(与xsd相关)? 回答1 如果您只想从 XML 文件生成 XSD 文件,则可以使用 Microsoft 的 XSD.EXE,它包含在 Visual Studio 中。 要使用它,请打开 Visual Studio 命令提示符。 然后输入xsd file.xml以生成该 XML 文件的模式。 您还可以使用该工具为 XML 输入生成类,只需传入/classes参数即可。 回答2 虽然 XML Schema 文件是一个 XML 文件,但它的某些事情可能会使“手动”完成它变得很麻烦; 有人可能会说为什么使用 DOM API 编写 XML 而不是使用由 XSD.exe 或 XSD2Code.exe 生成的 C# 类? 或推一下它...有点类似于有人说C#语句最终变成IL汇编; 为什么不写IL呢? 另一种选择是由 Schema Object Model API 提供的; 在 .NET 中,它是 System.Xml.Schema 命名空间。 看看在 MSDN 上找到的代码示例。 它会给你另一种方法的想法。 它提供了一个程序员友好的API来生成XSD
  • XSDObjectGen.exe和XSD.exe(XSDObjectGen.exe vs XSD.exe)
    问题 谁能告诉我XSDObjectGen.exe和XSD.exe有什么区别? 有什么方法可以使XSDObjectGen.exe在点网2.0中工作? 回答1 另外,还有Xsd2Code。 一些功能: 生成局部类。 支持通用和自定义集合(List,ObservableCollection,MyCustomCollection)。 当不需要特殊的获取或设置时,支持自动属性。 可以生成WCF属性(DataContract / DataMember)。 支持可修剪类型。 屏蔽IDE中的私有字段(使用EditorBrowsableState.Never属性)。 在构造函数中生成对象分配。 实现INotifyPropertyChanged以启用wpf或Silverlight的数据绑定。 通过Visual Studio外接程序提高生产力。 从xsd批注生成摘要文档。 在引发属性更改事件之前,请检查新值和旧值int setter是否相同。 在cs或vb标头中生成备份选项。 将Xml文档保存并加载到Silverlight应用程序的隔离文件存储中(3.0中的新增功能)。 生成CS,VB或CPP代码。 序列化/反序列化对象。 保存到文件并从文件加载。 包括Xsd2CodeCustomTool。 回答2 区别在于: XML架构定义工具( xsd.exe )是Visual Studio SDK的一部分
  • 以编程方式从 XSD 创建 XML 文件(Programmatically Create XML File From XSD)
    问题 我有一个 XSD 文件,我想在运行时基于 XSD 创建一个 XML 文件。 (我的问题与这个问题基本相同,除了在 .NET 世界中,而不是在 Java 中。) 我已经运行xsd.exe /c /l:vb MyTest.xsd ,但这会生成一个无法实例化和使用的类,因为它具有从未实例化的嵌套类。 生成的类似乎仅用于 XML 反序列化,但我没有要反序列化的 XML 文件。 运行xsd.exe /d /l:vb MyTest.xsd生成一个数据集,但看起来使用它比手动写出XmlDocument需要更多的编码。 基于特定模式创建 XML 文件的最佳方法是什么? 回答1 我使用了一个 XML 工具 (oXygen),它将此作为其功能的一部分。 我敢肯定还有其他的,这就是我们在这里使用的。 回答2 阅读这篇文章:http://msdn.microsoft.com/en-us/library/aa302296.aspx 它包括一个安装程序和使用 XmlSampleGenerator API 的示例。 回答3 原来我只是迟钝。 虽然 xsd 生成的类包含未初始化的嵌套类,但它们通过公共属性公开,因此没有什么能阻止我自己实例化它们。 类似于以下内容: ElementA.ElementB = New ElementB() ElementA.ElementB.Name = "Jason"
  • 如何以编程方式从类型生成xml模式?(How do I programmatically generate an xml schema from a type?)
    问题 我正在尝试以编程方式从任何.net类型生成xs:schema。 我知道我可以使用反射并通过遍历公共属性来生成反射,但是有内置的方法吗? 例子: [Serializable] public class Person { [XmlElement(IsNullable = false)] public string FirstName { get; set; } [XmlElement(IsNullable = false)] public string LastName { get; set; } [XmlElement(IsNullable = true)] public string PhoneNo { get; set; } } 所需的输出: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Person" type="Person" /> <xs:complexType name="Person"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="FirstName" type="xs:string" /> <xs:element minOccurs="0"
  • 有什么成分不能完成继承可以做到的吗?(Is there anything composition cannot accomplish that inheritance can?)
    问题 组成和继承。 我知道它们都是在适当的时候都可以选择的工具,上下文对于在组合和继承之间进行选择非常重要。 但是,关于每种方法的适当上下文的讨论通常有点模糊; 这使我开始考虑继承和多态性是传统OOP的不同方面是多么明显。 多态允许同等地指定“是”关系以及继承。 特别是,从基类继承会隐式在该类及其子类之间创建多态关系。 但是,尽管可以使用纯接口来实现多态,但是通过同时传递实现细节,继承会使多态关系复杂化。 这样,继承与纯多态性完全不同。 作为一种工具,继承通过简化琐碎情况下的实现重用,为程序员提供了不同于多态性(通过纯接口)的服务。 但是,在大多数情况下,超类的实现细节与子类的要求有些冲突。 这就是为什么我们有“替代”和“成员隐藏”的原因。 在这些情况下,需要购买继承提供的实现重用,而要付出更多的努力来验证级联代码级别的状态更改和执行路径:子类的完整“扁平化”实现细节分布在多个类之间,这通常意味着多个文件,其中只有一部分适用于所讨论的子类。 在处理继承时,绝对有必要查看该层次结构,因为如果不查看超类的代码,就无法知道哪些未覆盖的详细信息会影响您的状态或改变您的执行。 相比之下,排他性使用组合保证了您将看到可以由自己决定调用其方法的显式实例化对象修改的状态。 仍然无法实现真正​​扁平化的实现(并且实际上甚至不是期望的,因为结构化编程的好处是实现细节的封装和抽象)
  • 将XML字符串转换为对象(Convert XML String to Object)
    问题 我正在通过套接字接收XML字符串,并希望将它们转换为C#对象。 消息的形式为: <msg> <id>1</id> <action>stop</action> </msg> 我是.Net的新手,不确定执行此操作的最佳实践。 我以前使用过Java的JAXB,但不确定是否存在类似的东西,或者是否会以其他方式处理。 回答1 您需要使用xsd.exe工具,该工具随Windows SDK一起安装到类似于以下内容的目录中: C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin 在64位计算机上: C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\bin 在Windows 10计算机上: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin 在第一次运行时,您使用xsd.exe并将示例XML转换为XSD文件(XML模式文件): xsd yourfile.xml 这将为您提供yourfile.xsd ,在第二步中,您可以使用xsd.exe再次将xsd.exe转换为C#类: xsd yourfile.xsd /c 这应该给您一个文件yourfile.cs ,其中将包含一个C#类,您可以使用该类反序列化所获取的XML文件-类似于:
  • 有什么工具可以从XML实例文档生成XSD架构吗? [关闭](Any tools to generate an XSD schema from an XML instance document? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 7年前关闭。 改善这个问题 我正在寻找一种工具,该工具将使用XML实例文档并输出相应的XSD架构。 我当然认识到,与手动创建模式相比,生成的XSD模式将受到限制(它可能不会处理可选或重复的元素或数据约束),但至少可以作为一个快速的起点。 回答1 Microsoft XSD推理工具是一个很好的免费解决方案。 许多XML编辑工具(例如XmlSpy(由@Garth Gilmour提及)或OxygenXML Editor)也具有该功能。 不过,它们相当昂贵。 BizTalk Server也具有XSD推断工具。 编辑:我刚刚发现了.net XmlSchemaInference类,因此,如果您使用的是.net,则应考虑 回答2 您可以使用开放源代码和跨平台选项:Apache的XMLBeans中的inst2xsd。 我觉得它非常有用和容易。 只需下载,解压缩并播放(需要Java)。 回答3 董里是这里最好的选择。 开源和跨平台(尽管需要Java) 从董里网站: Trang在XML的不同模式语言之间转换。 它支持以下语言 RELAX NG(XML语法) RELAX NG紧凑语法 XML 1.0 DTD W3C
  • 从已知的 XSD 生成 .Net 对象(Generate .Net objects from known XSD)
    问题 我有一些 XSD-s 来定义我的对象层次结构。 例如 math.xsd, base.xsd 而 math.xsd 依赖于 base.xsd。 我需要从那些 xsd-s 生成类。 我已经阅读了这两个工具:CodeXS 工具和 XSD.exe。 xsd.exe 的问题是我没有成功地从两个相互依赖的 xsd-s 生成类。 有没有人知道在这种情况下使用 xsd.exe 的正确参数? 此外,我正在寻找: - 更多工具 - 这些工具之间的比较 - 使用 .net 3.5 的 xsd 对象 谢谢。 回答1 您没有理由不能使用xsd.exe使用的相同方法,但随后针对生成的 CodeDOM 模型运行您自己的代码以在将 .cs 文件写入磁盘之前进行所需的修改。 一般的想法是将 XSD 文件加载到XmlSchema对象中,然后使用内部XmlCodeExporter和XmlSchemaImporter类来填充 CodeDOM 命名空间。 完成此操作后,您可以自由地对 CodeDOM AST 进行任何需要进行的调整,然后将其写入磁盘。 例如。 XmlSchema schema = null; // Load XSD file here var schemas = new XmlSchemas(); schemas.Add(schema); var ns = new CodeNamespace {
  • 我应该如何在 msbuild 脚本中引用 sn.exe?(How should I reference sn.exe in msbuild script?)
    问题 我需要在构建完成后重新签署我的程序集(并且我已经对它做了一些其他的事情),所以我开始添加一个名为C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe的<Exec>任务C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe 。 这必须适用于其他开发人员/环境,所以我希望我可以从该文件夹中复制sn.exe和sn.exe.config并将其存储在我们的代码存储库中,以便我始终可以从已知版本调用它的通用版本地点。 sn.exe在 sdk 目录之外sn.exe崩溃,所以我想知道如何在不知道它将位于什么路径下的情况下引用它。 不同的人有不同的环境(x86 与 x64,不同的安装目录,不同的版本),所以我希望能够轻松引用该工具的最新版本(或者任何版本)。 似乎是一个足够简单的工具,也许还有另一种方法可以使用另一个工具/命令/msbuild 任务对程序集进行签名? 任何帮助,将不胜感激。 回答1 要以适合大多数人的方式在 msbuild 脚本中正确引用sn或sqlmetal (我所追求的)之类的工具,您必须考虑操作环境和框架实现的不同方面。 主要有两种情况:Microsoft
  • 从类中获取所有字段(包括私有字段和继承字段)(Get all fields (even private and inherited) from class)
    问题 我正在做大学项目。 我需要从课堂上获取所有字段。 甚至是私有的并继承的。 我试图获取所有声明的字段,然后将其强制转换为超类并重复。 我的代码片段: private void listAllFields(Object obj) { List<Field> fieldList = new ArrayList<Field>(); while (obj != null) { fieldList.addAll(Arrays.asList(obj.getClass().getDeclaredFields())); obj = obj.getClass().getSuperclass().cast(obj); } // rest of code 但这是行不通的。 tmpObj后的tmpObj仍然是同一类(不是超类)。 我将不胜感激,帮助您解决铸造问题,或如何以其他方式检索这些字段。 问题不是获得对字段的访问权,而是获得字段的名称! 我以这种方式进行管理: private void listAllFields(Object obj) { List<Field> fieldList = new ArrayList<Field>(); Class tmpClass = obj.getClass(); while (tmpClass != null) { fieldList.addAll
  • 如何将XML / JSON文件转换为C#类?(How to convert XML/JSON file to C# class?)
    问题 我有这样的XML文件: <?xml version="1.0"?> <catalog> <book id="1" date="2012-02-01"> <title>XML Developer's Guide</title> <price>44.95</price> <description> An in-depth look at creating applications with XML. </description> </book> <book id="2" date="2013-10-16"> <author>Mark Colsberg</author> <title>Dolor sit amet</title> <price>5.95</price> <description>Lorem ipsum</description> </book> </catalog> 如何通过LINQ快速将其转换为C#类以使用访问数据? 是否必须为任何XML文件案例手动编写该类? JSON格式呢? XSD是唯一的解决方案吗? 回答1 您有两种可能性。 方法1。XSD工具 假设您的XML文件位于此位置C:\path\to\xml\file.xml 打开开发人员命令提示符您可以在Start Menu > Programs > Microsoft Visual Studio 2012 >
  • 在Windows 8的Visual Studio 2013中的哪里可以找到xsd.exe(where to find xsd.exe in visual studio 2013 on windows 8)
    问题 我已使用Visual Studio 2003和2008的xsd.exe实用程序从第三方XSD文件生成类型化的数据集。 第三方已更改其架构,因此我需要重新生成数据集,但找不到XSD.EXE 。 win8搜索为我提供了有关实用程序的信息,但没有提供实用程序的位置,我在Windows资源管理器中尝试了搜索,但未获得任何结果。 我读了有关Win7/VS 2008帖子,说它是WinSDK的一部分,但我也不能在该文件夹中找到它。 一些发布者说,现在需要从哪里下载它。 我正在运行64 bit Windows 8 pro和Visual Studio 2013 Ultimate 。 回答1 安装SDK *(手动或与Visual Studio一起安装)后,您将在以下目录中找到它: SDK 8及更高版本 还有一个附加的FX版本子目录: %programfiles(x86)%\Microsoft SDKs\Windows\{ver}\bin\{FXVer} Tools 在哪里 {ver}是SDK版本(例如v8.1A ) 而{FXVer}是适用的.Net Framework版本,例如NETFX 4.0v 例如 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools C:\Program Files (x86)
  • c# regex - 从类文件 (.cs) 中选择类属性名称、方法名称和字段(c# regex - select class properties names, methods name and fields from class file (.cs))
    问题 我想匹配(从类文件中选择)方法名、属性名和字段名。 这是示例类: class Perl { string _name; public string Name { get; set; } public Perl() { // Assign this._name this._name = "Perl"; // Assign _name _name = "Sam"; // The two forms reference the same field. Console.WriteLine(this._name); Console.WriteLine(_name); } public static string doSomething(string test) { bla test; } } 我得到了这些方法的代码: (?:public|private|protected)([\s\w]*)\s+(\w+)\s*\(\s*(?:\w+\s+(\w+)\s*,?\s*)+\) 我有问题: 上面的正则表达式代码获取所有方法,并且运行良好,但我也希望它选择方法名称但没有参数和访问器。 所以从 exaplmce 类使用我的代码结果将是: public Perl()和public static doSomething(string test)但我想要那种结果: Perl(
  • 如何使用 XSD.exe 从 C# 类型生成 XML 架构,以便将 [XmlAttribute] 属性映射到所需的 XML 属性?(How to generate XML Schema from C# type with XSD.exe such that [XmlAttribute] property is mapped to required XML attribute?)
    问题 简而言之,当我使用 XSD.exe(Visual Studio 2012 附带的)从此类生成 XML 架构文件时: [Serializable] public class Person { [XmlAttribute] public string Name { get; set; } [XmlAttribute] public int Age { get; set; } } 我得到这个结果: <?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Person" nillable="true" type="Person" /> <xs:complexType name="Person"> <xs:attribute name="Name" type="xs:string" /> <xs:attribute name="Age" type="xs:int" use="required" /> </xs:complexType> </xs:schema> 请注意, Age属性在生成的模式中被指定为 required (它有use="required"
  • 框架vs工具包vs库[重复](Framework vs. Toolkit vs. Library [duplicate])
    问题 这个问题已经在这里有了答案: 框架和库之间有什么区别? (20个答案) 4年前关闭。 框架,工具包和库之间有什么区别? 回答1 库和框架之间最重要的差异(实际上是定义的差异)是控制反转。 这是什么意思? 好吧,这意味着当您调用一个库时,您就处于控制之中。 但是,有了框架,控件就被颠倒了:框架调用了您。 (这被称为好莱坞原则:不要称呼我们,我们称呼您。)这几乎就是框架的定义。 如果没有控制反转,则它不是框架。 (我在看着你,.NET!) 基本上,所有控制流都已经在框架中,并且只有一堆预定义的白点可以用代码填充。 在另一方面,一个图书馆的功能,你可以调用的集合。 我不知道“工具箱”一词的定义是否正确。 只是“套件”一词似乎暗示了某种模块化,即可以从中选择的一组独立的库。 那么,什么使工具包不同于一堆独立的库呢? 集成:如果您只有一堆独立的库,则不能保证它们可以很好地协同工作,而工具箱中的库被设计为可以很好地协同工作–您不必全部使用它们。 但这实际上只是我对该术语的解释。 不同于库和框架,这是明确的,我不认为有工具包的一个被广泛接受的定义。 回答2 马丁·福勒(Martin Fowler)在其关于控制反转的文章中讨论了库和框架之间的区别: 控制反转是使框架与库不同的关键部分。 库本质上是您可以调用的一组函数,这些天通常组织成类。 每个调用都会执行一些工作,并将控制权返回给客户端。
  • Visual Studio 2010:IDE 中类的 XML XSD 架构(Visual Studio 2010 : XML XSD Schema to Classes within the IDE)
    问题 每当我需要从 XML XSD 架构创建类文件时,我都会在 VS 中使用 .NET xsd.exe 工具和预构建事件,以确保我的类和架构在构建时彼此同步。 这当然工作正常,但是...... 我注意到,如果 XSD 和派生类在同一个项目中,VS 会理解这种关系,并在解决方案资源管理器中直观地将 CS 显示为 XSD 文件的子级。 所以我想知道 Visual Studio 2010 中是否有任何功能可以在 IDE 中为我创建类而不是依赖于预构建脚本? 例如,我会将 XSD 添加到项目中,在某处设置一些选项,然后 VS 接管并为我创建我的类。 VS 2010 是否支持这样的东西? 或者我应该停止思考并继续使用 xsd.exe 和预构建。 编辑我还注意到,在 XSD 文件的属性下,我可以选择设置Custom Tool ,阅读描述这似乎与我的目标很接近,但我不确定此属性的正确用法。 编辑另外,如果有一个解决方案,我需要这个基于VS2010标准的特性/功能。 我宁愿不使用第 3 方插件等 回答1 Visual Studio 2010 本身不包含任何此类供一般使用的功能。 Visual Studio 在 ADO.NET 中类型化数据集的上下文中对这种 XSD 到代码的转换提供了一些有限的支持 - 但这些不是通用解决方案,它们正是针对那种使用场景。 但请查看XSD2Code 插件
  • 从XML生成C#类(Generate C# class from XML)
    问题 我可以从XML文件生成C#类吗? 回答1 是的,通过使用xsd.exe D:\temp>xsd test.xml Microsoft (R) Xml Schemas/DataTypes support utility [Microsoft (R) .NET Framework, Version 4.0.30319.1] Copyright (C) Microsoft Corporation. All rights reserved. Writing file 'D:\temp\test.xsd'. D:\temp>xsd test.xsd /classes Microsoft (R) Xml Schemas/DataTypes support utility [Microsoft (R) .NET Framework, Version 4.0.30319.1] Copyright (C) Microsoft Corporation. All rights reserved. Writing file 'D:\temp\test.cs'. 笔记 回答如何将“开发人员命令提示符”中的目录更改为d:\ temp可能会有用。 如果为多维数组生成类,则XSD.exe生成器中存在错误,但是存在解决方法。 回答2 如果您正在VS 2012(或更高版本)中的.NET 4.5项目