4

ビルドの一部として、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

おそらくビルドエラーの内部例外を取得する方法はありますか?

4

2 に答える 2

6

Marc Gravell が指摘したようsgen /v MyClient.exeに、bin ディレクトリで実行すると、より多くの情報が得られました。

この問題は、同じ名前を共有する複数のクラスが原因で発生しました。この場合、2 つのフォームの両方が同じ MicroContact クラスを実装し、一方が他方からコピーされました。

于 2011-11-07T07:14:24.213 に答える
0

前の回答で述べたように、最も頻繁に発生する問題は型名の重複です。ただし、問題の解決策はさまざまです。

  • 複製されたタイプのいずれかの名前を変更するか、その xml シリアライゼーション名を次の方法で変更します。[XmlType("NewTypeName")]
  • [System.Xml.Serialization.XmlType(AnonymousType = true)]シリアル化された型の属性を宣言します。
  • 重複した型の 1 つの名前空間を定義します。たとえば、XML 要素型に使用されている場合は、次を使用します。[XmlElement(Namespace="http://example.com")]

この問題を別の方法で解決した場合は、それについて知りたいです。

于 2016-07-21T10:00:06.600 に答える