0

主に 4.0 で記述された WinForms アプリケーションがあり、C# オブジェクトを Xml にシリアル化する際に大きな問題が発生しています。シリアル化を行うコンポーネントは 3.5 ですが、それは問題になりません。

Visual Studio を使用してデバッグ モードで実行することは問題ありませんが、.exe からアプリケーションを実行するとすぐに、Xml にシリアル化するときに次のエラーが発生します。

System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidProgramException: Common Language Runtime detected an invalid program.
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFrmFrm.Write53_FrmTable(String n, String ns, FrmTable o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFrmFrm.Write55_FrmFrm(String n, String ns, FrmFrm o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFrmFrm.Write56_frm(Object o)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o)

Xml にシリアル化するさまざまな方法を試してみましたが、結果が変わらないようです。XmlSerializer.Serialize 呼び出しは常に壊れます。これが私たちの特定の呼び出しです:

XmlSerializer serializer = new XmlSerializer(obj.GetType());
XDocument xmlDocument = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
using (XmlWriter documentWriter = xmlDocument.CreateWriter())
{
    serializer.Serialize(documentWriter, obj);
}
return xmlDocument;

この問題は、.net 4.5 がインストールされているマシンでのみ発生することに注意してください。それを外して 4.0 を装着すると、問題なく動作します。また、app.config で .net バージョンを強制しようとしました。

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>

しかし、役に立たない。

誰かがこの問題を助けることができれば、私は非常に感謝しています.

4

0 に答える 0