.net SGEN误差反射型

.net SGEN误差反射型,.net,xml-serialization,build-error,sgen,.net,Xml Serialization,Build Error,Sgen,我已经实施了被接受的答复中提到的变更 是否有任何方法可以获取生成错误的内部异常?正如Marc Gravell指出的,在bin目录中运行sgen/v MyClient.exe可以获得更多信息 该问题是由多个共享相同名称的类引起的,在本例中,两个表单都实现了相同的MicroContact类,因为一个表单是从另一个表单复制的。如前一个答案中所述-最常见的问题是重复的类型名称。然而,解决这一问题的方法多种多样: 通过[XmlType(“NewTypeName”)] 为序列化类型声明[System.Xm

我已经实施了被接受的答复中提到的变更


是否有任何方法可以获取生成错误的内部异常?

正如Marc Gravell指出的,在bin目录中运行
sgen/v MyClient.exe
可以获得更多信息


该问题是由多个共享相同名称的类引起的,在本例中,两个表单都实现了相同的MicroContact类,因为一个表单是从另一个表单复制的。

如前一个答案中所述-最常见的问题是重复的类型名称。然而,解决这一问题的方法多种多样:

  • 通过
    [XmlType(“NewTypeName”)]
  • 为序列化类型声明
    [System.Xml.Serialization.XmlType(AnonymousType=true)]
    属性
  • 为其中一个复制类型定义名称空间-例如,如果它用于XML元素类型,则使用
    [XmlElement(名称空间=”http://example.com”)

如果您以另一种方式解决了这个问题,我很想知道。

老实说,我不知道
任务,但是您是否尝试过在命令行中使用
/v
开关运行sgen?如果您在XML序列化属性中列出了重复的XML属性、元素和类型名称,也可能发生这种情况
<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
   <!-- Delete the file because I can't figure out how to force the SGen task. -->
   <Delete Files="$(TargetDir)$(TargetName).XmlSerializers.dll" ContinueOnError="true" />
   <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)" Platform="$(Platform)">
      <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
   </SGen>
</Target>
Public Class MicroContact
    Implements IComparable

    Private _id As Long
    Private _name As String

    Public Property Id() As Long
        Get
            Return _id
        End Get
        Set(ByVal value As Long)
            _id = value
        End Set
    End Property

    Public Property NoTitleFullName() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Sub New()
        _name = ""
    End Sub

    Public Sub New(ByVal id As Long, ByVal name As String)
        _id = id
        _name = name
    End Sub

    Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
        Return String.Compare(Me.NoTitleFullName, CType(obj, MicroContact).NoTitleFullName, True)
    End Function

End Class