我正在尝试从.NET 3.5应用程序检查silverlight 4程序集中的类型。我已经使用Assembly.ReflectionOnlyLoadFrom句子加载了silverlight程序集。
contractsAssembly = Assembly.ReflectionOnlyLoadFrom(contractsAssemblyPath);
当.NET应用程序尝试执行对GetTypes()的调用时,它会抛出ReflectionTypeLoadException。
Type[] types = contractsAssembly.GetTypes();
ReflectionTypeLoadException中的LoaderExceptions属性包含一个异常列表,所有这些异常都与加载具有序列化属性的类型的问题有关。
在程序集“YYYY”中输入“XXXX”的方法为“OnSerializing”,其序列化属性的签名不正确。
XXXX类型中包含以下定义:
[System.Runtime.Serialization.OnSerializing]
public void OnSerializing(System.Runtime.Serialization.StreamingContext context)
[System.Runtime.Serialization.OnSerialized]
public void OnSerialized(System.Runtime.Serialization.StreamingContext context)
[System.Runtime.Serialization.OnDeserializing]
public void OnDeserializing(System.Runtime.Serialization.StreamingContext context)
[System.Runtime.Serialization.OnDeserialized]
public void OnDeserialized(System.Runtime.Serialization.StreamingContext context)
我尝试将方法签名更改为内部或私有,但没有运气。当我在检查此程序集的silverlight应用程序中执行GetTypes()调用时,我没有任何问题,所以我认为这是由于.NET Framework和Silverlight之间不兼容。但是,我发现像Reflector这样的.NET工具可以检查这个Silverlight程序集,因此有一种方法可以使用.NET应用程序中的序列化属性检查Silverlight程序集。有人能否对我有所了解?
非常感谢提前。
何塞安东尼奥答案 0 :(得分:2)
实际上我不认为这是关于Silverlight和.NET Framework之间的不兼容性,而是关于3.5和4.0 .NET Framework(2.0和4.0 CLR)之间的不兼容性。
Since you cannot reference 4.0 assemblies in 3.5 project,我认为你可能无法以动态的方式成功加载它们。
任何有类似错误的人,但在混合装配时不会。
在程序集“YYYY”中输入“XXXX”的方法为“OnSerializing”,其序列化属性的签名不正确。
确保将StreamingContext context
指定为参数。我有以下方法,它失败了以上错误:
[OnDeserialized]
private void OnDeserialized()
{
Init();
}
即使这个问题很老,但我希望它会对某人有所帮助。