3

使用命令行:

"xsd.exe" "OFX 2.1.1 schema/OFX2_Protocol.xsd" /c /namespace:OFX /nologo"

生成的 C# 源文件无法构建并出现以下错误:

D:\blah\OFX2_Protocol.cs(19,6): error CS0579: Duplicate 'System.CodeDom.Compiler.GeneratedCodeAttribute' attribute
D:\blah\OFX2_Protocol.cs(20,6): error CS0579: Duplicate 'System.SerializableAttribute' attribute
D:\blah\OFX2_Protocol.cs(21,6): error CS0579: Duplicate 'System.Diagnostics.DebuggerStepThroughAttribute' attribute
D:\blah\OFX2_Protocol.cs(22,6): error CS0579: Duplicate 'System.ComponentModel.DesignerCategoryAttribute' attribute
D:\blah\OFX2_Protocol.cs(23,6): error CS0579: Duplicate 'System.Xml.Serialization.XmlTypeAttribute' attribute
D:\blah\OFX2_Protocol.cs(24,6): error CS0579: Duplicate 'System.Xml.Serialization.XmlRootAttribute' attribute

一个类似的 XSD 模式,我从 OFX2 模式复制然后修剪成我想要的有用位,生成一个 C# 文件,它构建得很好,但具有与完整模式的 C# 表示形式相同的所有属性。

知道为什么吗?OFX 架构是否损坏?xsd.exe 坏了吗?C#坏了吗?我坏了吗?

4

4 回答 4

7

好的,这个答案很久了......

我刚刚遇到了同样的问题。问题不在于 foo.cs,而在于 foo.designer.cs。您必须删除第二类中的重复属性。

C# 应该允许跨部分类的重复属性,或者修复 xsd 以省略除 .cs 文件之外的所有属性。

于 2011-04-01T20:40:44.100 回答
2

我在不同的模式下遇到了同样的问题(同样的“重复属性”问题)。原因是由于 2 个 xsd 模式(2 个生成的文件),在每个模式中我都有相同的“类型”元素,但定义不同。将其中一种类型重命名为不同的名称解决了该问题

于 2013-06-11T10:02:27.467 回答
1

最新版本的 OFX​​ 规范下载有一个“OFX3_Protocol_dotNET.xsd”,它已从“OFX2_Protocol.xsd”修改为更适合 .NET 代码生成工具。尽管我还没有反序列化任何 XML,但我已经从这个 xsd 生成了 C#,没有任何问题。

于 2011-09-04T04:30:46.780 回答
0

我自己也遇到了这个问题,结果发现对于那些我得到重复属性错误的类已经在同一个命名空间下的其他地方声明了。因此,任何试图排除故障的人,都需要确保罪魁祸首类在给定的命名空间下只声明一次。例如,XSD.exe 导入生成以下类:

namespace Example.Imports 
{
  using System.Xml.Serialization;

    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.example.com/Common")]
    [System.Xml.Serialization.XmlRootAttribute("order", Namespace="http://www.example.com/Order", IsNullable=false)]
    public partial class OrderType {
    
        private DocType docField;
        
        public DocType doc {
            get {
                return this.docField;
            }
            set {
                this.docField = value;
            }
        }
    }
    
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.example.com/Common")]
    public partial class DocType {
        
        private System.Xml.XmlElement[] anyField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAnyElementAttribute()]
        public System.Xml.XmlElement[] Any {
            get {
                return this.anyField;
            }
            set {
                this.anyField = value;
            }
        }
    }
}

我在 DocType 类上遇到重复属性错误,因为 XSD.exe 将所有导入的类型声明为部分类,并且由于其他早期的 XSD 导入,DocType 已经存在于同一命名空间中。我只是将它的命名空间更改为 Example.Imports.Orders 所以这个命名空间下只有 DocType。我希望这能说明问题和可能的修复。

于 2020-09-08T21:17:50.320 回答