我已经构建了一个方面,它在我自己的一个库中使用了一个类来完成它的工作。这个类需要被序列化以便有用,但是当让PostSharp做它的事情我得到了这个错误:
PostSharp 3.0 [3.0.35.0, 64 bit, CLR 4.5, Release] - Copyright (c) SharpCrafters
s.r.o., 2004-2012.
POSTSHARP : error LA0001: Cannot serialize the aspects: Cannot find a serializer
for type 'NextGen.Framework.Managers.LogMgr.NxLogMgr'..
POSTSHARP : message PS0122: Details of the previous error or warning:\nPostSharp
.Serialization.PortableSerializationException: Cannot find a serializer for type
'NextGen.Framework.Managers.LogMgr.NxLogMgr'.
POSTSHARP : message PS0122: at PostSharp.Serialization.SerializationWriter.Ge
tObjectInfo(Object obj)
POSTSHARP : message PS0122: at PostSharp.Serialization.SerializationWriter.Wr
iteObjectReference(Object value, Boolean writeInitializationDataInline)
POSTSHARP : message PS0122: at PostSharp.Serialization.SerializationWriter.Wr
iteValue(Object value, SerializationIntrinsicType intrinsicType, Boolean writeIn
itializationDataInline)
POSTSHARP : message PS0122: at PostSharp.Serialization.SerializationWriter.Wr
iteArguments(Arguments arguments, Boolean writeInitializationArgumentsInline)
POSTSHARP : message PS0122: at PostSharp.Serialization.SerializationWriter.Se
rialize(Object obj)
POSTSHARP : message PS0122: at ^RIeE65/59SwT.^AiEkYplb()
POSTSHARP : error PS0060: The processing of module "NextGen.BusinessObject.Posti
ngQueueMgr_3Base.dll-PostSharp.dll" was not successful.
有谁知道我可能会缺少什么?
P.S。该类的定义如下:
Namespace NextGen.Framework.Managers.LogMgr
<Serializable>
Public Class NxLogMgr
- 更新 -
在谷歌搜索中我找到了这个(来自PostSharp开发者):
当您尝试在方面内部序列化Type时会发生这种情况, 并且CLR无法将Type加载为运行时类型。 PostSharp 然后提供反射包装器,但这些不能序列化
(见:http://support.sharpcrafters.com/discussions/problems/484-additional-exception-detail)
所以我的方面使用了这个LogMgr类,它被声明为可序列化的,但是CLR无法加载它?
答案 0 :(得分:3)
您收到此消息是因为您使用[PSerializable]
标记了类型,并且此类型具有可序列化字段(未标记为[PNonSerialized]
)且没有序列化程序的类型。
有两种策略可供选择:
将类型NextGen.Framework.Managers.LogMgr.NxLogMgr
标记为[PSerializable]
,这会为此类型生成标准序列化程序。如果您拥有此程序集的源代码并且能够在其上运行PostSharp,这可能是最佳选择。
为此类型编写自定义序列化程序:
PostSharp.Serialization.ReferenceTypeSerializer
或PostSharp.Serialization.ValueTypeSerializer
派生一个类型并实现抽象方法。PostSharp.Serialization.ImportSerializerAttribute
添加到程序集或引用NextGen.Framework.Managers.LogMgr.NxLogMgr
的类型。因为第二种方法比较困难,所以如果您的项目无论如何都针对.NET而不是Silverlight,Windows Store或Windows Phone,那么使用普通的.NET序列化程序[Serializable]
可能更好。