SGEN ошибка, отражающая тип - PullRequest
       21

SGEN ошибка, отражающая тип

4 голосов
/ 07 ноября 2011

Я применил изменение, упомянутое в принятом ответе Создание сборки сериализации 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>

Сообщение об ошибке при сборке exe-проекта:

Ошибка 14 Произошла ошибка, отражающая тип «myNamespace.myAssembly.myForm.MicroContact».C: \ dev \ src \ myClient \ myClient \ SGEN myClient

Вот код для MicroContact (здесь нет ничего уникального):

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

Есть ли способ, которым я могувозможно получить внутреннее исключение ошибки сборки?

Ответы [ 2 ]

6 голосов
/ 07 ноября 2011

Как отметил Марк Гравелл, запуск sgen /v MyClient.exe в каталоге bin дал дополнительную информацию.

Проблема была вызвана тем, что несколько классов имели одно и то же имя, в этом случае две формы реализовали один и тот же класс MicroContact, какодно было скопировано с другого.

0 голосов
/ 21 июля 2016

Как уже упоминалось в предыдущем ответе, чаще всего проблема заключается в дублировании имен типов. Однако решения проблемы различны:

  • Измените имя одного из дублированных типов или измените имя сериализации xml на [XmlType("NewTypeName")]
  • Объявите атрибут [System.Xml.Serialization.XmlType(AnonymousType = true)] для сериализованного типа.
  • Определить пространство имен для одного из дублированных типов - например, если оно используется для типа элемента XML, тогда используйте [XmlElement(Namespace="http://example.com")]

Если бы вы решили эту проблему по-другому - я бы хотел об этом узнать.

...