gpt4 book ai didi

c# - 已签名程序集在 SOAP 反序列化时生成 "Application has stopped working"

转载 作者:行者123 更新时间:2023-11-30 19:46:47 25 4
gpt4 key购买 nike

我正在实例化一个对象,并使用 SOAP 数据填充它。

这曾经运作良好。

但是,在为程序集指定一个强名称后,出现以下错误:

error window

重要的一点是:

Application has stopped working

Problem Signature: System.Runtime.Serialization.Formatters.Soap

调试器向我显示了一个 System.Runtime.Serialization.SerializationException,其中包含以下详细信息。请注意序列化解析器如何提示“没有与 Xml key 关联的程序集”

debugger

完整的错误描述是:

Parse Error, no assembly associated with Xml key a1:http://schemas.microsoft.com/clr/nsassem/MyProject/MyProject%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull MainForm

这是 StackTrace

at System.Runtime.Serialization.Formatters.Soap.SoapHandler.ProcessGetType(String value, String xmlKey, String& assemblyString)

at System.Runtime.Serialization.Formatters.Soap.SoapHandler.ProcessType(ParseRecord pr, ParseRecord objectPr)

at System.Runtime.Serialization.Formatters.Soap.SoapHandler.ProcessAttributes(ParseRecord pr, ParseRecord objectPr)

at System.Runtime.Serialization.Formatters.Soap.SoapHandler.StartChildren()

at System.Runtime.Serialization.Formatters.Soap.SoapParser.ParseXml()

at System.Runtime.Serialization.Formatters.Soap.SoapParser.Run()

at System.Runtime.Serialization.Formatters.Soap.ObjectReader.Deserialize(HeaderHandler handler, ISerParser serParser)

at System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize(Stream serializationStream, HeaderHandler handler)

at System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize(Stream serializationStream)

at MyProject.Program.Main() in C:\MyProject\Program.cs:line 35

at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)

at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Threading.ThreadHelper.ThreadStart()

我取消选中“对程序集签名”,重新构建解决方案,就像变魔术一样,一切都恢复正常——所以,我知道错误的 SOAP 文件不是根本原因。事实上,如果我不得不冒险猜测,我会说强程序集名称“混淆”了 SOAP 反序列化程序。

我该如何解决这个问题?

最佳答案

讯息

Parse Error, no assembly associated with Xml key a1:http://schemas.microsoft.com/clr/nsassem/MyProject/MyProject%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull

表示数据已使用 PublicKeyToken 设置为 null 的程序集序列化。这意味着在序列化时,该程序集没有强名称。

现在,如果您重新编译此程序集并使用强名称对其进行签名,并在不更改序列化数据的情况下将其重新部署到位,则程序集标识将不被视为相同,并且反序列化代码将无法使用它进行反序列化,因此出现错误。

用于序列化和反序列化的程序集必须具有相同的全名(至少与您使用的格式化程序和绑定(bind)程序一样)。

所以这可能是一个部署问题(确保序列化和反序列化程序集具有相同的全名),或者如果您确实需要能够处理具有不同全名的程序集(但这并不常见),您可以使用自定义 Binder ,就像这里所做的一样:Deserializing data into a dynamically loaded Assembly尽管我不建议将其用于标准操作。

关于c# - 已签名程序集在 SOAP 反序列化时生成 "Application has stopped working",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com