Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.net项目中使用SilverLight库(dll)_C#_.net_Silverlight_Serialization_Runtime Error - Fatal编程技术网

C# 在.net项目中使用SilverLight库(dll)

C# 在.net项目中使用SilverLight库(dll),c#,.net,silverlight,serialization,runtime-error,C#,.net,Silverlight,Serialization,Runtime Error,我有一个SilverLight lib dll,它实现了我需要在.net项目中使用的类。我遵循了所描述的步骤,但是我不知道如何使用代理库来公开我需要的类。我在.net项目中添加了对代理的引用。该dll适用于silverlight 5,我使用的是.net 4.0 如果我只是添加dll作为引用,我可以使用SL对象,但不能序列化它们 下面是有问题的代码: static string SerializeWithDCS(object obj) { if (obj == nu

我有一个SilverLight lib dll,它实现了我需要在.net项目中使用的类。我遵循了所描述的步骤,但是我不知道如何使用代理库来公开我需要的类。我在.net项目中添加了对代理的引用。该dll适用于silverlight 5,我使用的是.net 4.0

如果我只是添加dll作为引用,我可以使用SL对象,但不能序列化它们

下面是有问题的代码:

    static string SerializeWithDCS(object obj)
    {
        if (obj == null) throw new ArgumentNullException("obj");
        DataContractSerializer dcs = new DataContractSerializer(obj.GetType());
        MemoryStream ms = new MemoryStream();
        dcs.WriteObject(ms, obj);
        return Encoding.UTF8.GetString(ms.GetBuffer(), 0, (int)ms.Position);
    }
序列化失败,原因是:

System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.Serialization, Versio
n=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system ca
nnot find the file specified.                                                                         
File name: 'System.Runtime.Serialization, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea
7798e'                                                                                                
   at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int
32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)            
   at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeType
Handle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)                    
   at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Ty
pe[] genericMethodArguments)                                                                          
   at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, Me
tadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decora
tedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList deriv
edAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolea
n& isVarArg)                                                                                          
   at System.Reflection.CustomAttribute.IsCustomAttributeDefined(RuntimeModule decoratedModule, Int32 
decoratedMetadataToken, RuntimeType attributeFilterType, Boolean mustBeInheritable)                   
   at System.Reflection.CustomAttribute.IsDefined(RuntimeType type, RuntimeType caType, Boolean inheri
t)                                                                                                    
   at System.RuntimeType.IsDefined(Type attributeType, Boolean inherit)                               
   at System.Runtime.Serialization.CollectionDataContract.IsCollectionOrTryCreate(Type type, Boolean t
ryCreate, DataContract& dataContract, Type& itemType, Boolean constructorRequired)                    
   at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.CreateDataContract(Int32 id
, RuntimeTypeHandle typeHandle, Type type)                                                            
   at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.GetDataContractSkipValidati
on(Int32 id, RuntimeTypeHandle typeHandle, Type type)    

使用反射编写自己的序列化

这是我能想出的最好的解决办法——愿一个更好的人提供更好的答案

问题似乎确实是System.Runtime.Serialization中的属性不同于.NET和Silverlight。安德斯·古斯塔夫松(Anders Gustafsson)在相关问题中谈到了这一点

我不明白为什么我不能让它工作

我尝试创建AppDomain并将所有必要的程序集加载到其中:

冒充第三方程序集的测试dll, 将执行序列化的Silverlight包装程序集, 所有Silverlight 5芯组件和 System.Runtime.Serialization的Silverlight 5变体。 然后我调用了包装程序集中调用序列化的代码,但仍然得到了异常

这令人费解——也许我只是做错了什么

如果有更博学的人对此有话要说,我会非常感兴趣的


在任何情况下,都可以编写自定义序列化程序,我认为这将解决问题。

使用反射编写自己的序列化

这是我能想出的最好的解决办法——愿一个更好的人提供更好的答案

问题似乎确实是System.Runtime.Serialization中的属性不同于.NET和Silverlight。安德斯·古斯塔夫松(Anders Gustafsson)在相关问题中谈到了这一点

我不明白为什么我不能让它工作

我尝试创建AppDomain并将所有必要的程序集加载到其中:

冒充第三方程序集的测试dll, 将执行序列化的Silverlight包装程序集, 所有Silverlight 5芯组件和 System.Runtime.Serialization的Silverlight 5变体。 然后我调用了包装程序集中调用序列化的代码,但仍然得到了异常

这令人费解——也许我只是做错了什么

如果有更博学的人对此有话要说,我会非常感兴趣的


在任何情况下,都可以编写自定义序列化程序,我认为这将解决问题。

您可能遇到与此和中相同的问题。是否可以选择创建.NET库并包含Silverlight源代码?是否尝试将Silverlight项目转换为可移植类库另一种选择是项目链接器:@AndersGustafsson:我没有源代码。我不知道这是否可行,但如果您尝试使用Silverlight中不可用的序列化程序,该怎么办?特别是我在想,根据文档,应该能够序列化已应用的类型。不,愚蠢的想法!试过了,也没用。您可能遇到了与此和中相同的问题。是否可以选择创建.NET库并包含Silverlight源代码?是否尝试将Silverlight项目转换为可移植类库另一种选择是项目链接器:@AndersGustafsson:我没有源代码。我不知道这是否可行,但如果您尝试使用Silverlight中不可用的序列化程序,该怎么办?特别是我在想,根据文档,应该能够序列化已应用的类型。不,愚蠢的想法!试过了,也没用。