XmlSerializer即使引用了EntityObject,也找不到它

时间:2009-02-12 05:02:10

标签: entity-framework xml-serialization

我希望有人可以帮我解决我在XmlSerializer上遇到的这个问题。

我已经浏览了这个帖子:http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/551cee76-fd80-48f8-ac6b-5c22c234fecf/

我得到的错误是:

System.InvalidOperationException:无法生成临时类(result = 1)。 错误CS0012:类型'System.Data.Objects.DataClasses.EntityObject'在未引用的程序集中定义。您必须添加对程序集'System.Data.Entity,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用。

我已确保我的单元测试具有对System.Data.Entity的引用,因此它至少可以编译。我也在app.config中创建了一个绑定到System.Data.Entity的程序集。

这是我粗略的班级结构

[Serializable] 
[XmlRoot(Namespace = XmlSupport.MyNamespace, ElementName = XmlSupport.WantToSerialize)] 
[XmlInclude(typeof(WantToSerializeBaseClass)]
[XmlInclude(typeof(EntityObject)]
[XmlInclude(typeof(MyEntityObjectSubClass)]
public class WantToSerialize : WantToSerializeBaseClass, IXmlSerializable  (I've tried putting this on the baseclass and the current class)
{
  // methods and classes 
  // I've included XmlIncludes for all the classes that this class has a reference too
  //  even though in the WriteXml it just uses .NET base classes
}

WantToSerializeBaseClass使用了一些泛型,但我用XmlIncludes(EntityObject,以及它引用的任何其他类)来装饰它。

主叫代码:

var serializerWrite = new XmlSerializer(typeof (WantToSerialize), XmlSupport.ITNNamespace); 

失败

但是,如果我这样做:

var serializerWrite = new XmlSerializer(typeof (WantToSerialize), new Type[] {typeof(EntityObject)}); 

它是成功的。

任何想法都会有所帮助。

已更新 我已将问题跟踪到WantToSerializeBaseClass

中的方法
public abstract void ConvertFromEntity<TtoCopy>(TtoCopy toCopy) where TtoCopy : MyEntityObjectSubClass;

MyEntityObjectSubClass是EntityObject的子类,它在我的实体对象上添加了一些我想要的方法。 MyEntityObjectSubClass看起来像这样:

[Serializable]
[XmlInclude(typeof(EntityObject))]
public abstract class MyEntityObjectSubClass : EntityObject, IMyEntityObjectSubClass 

再一次,任何想法都会很棒

4 个答案:

答案 0 :(得分:0)

如果在编译时没有任何需要引用的代码,那么该引用将不会包含在构建的程序集中。您可以使用Reflector之类的工具来检查引用是否正在进入程序集。

您可以尝试的一件事是为WantToSerialize添加静态方法,以创建XmlSerializer。包含WantToSerialize的程序集必须已经具有对EntityObject的良好引用,因此这应该可以解决问题。

答案 1 :(得分:0)

我最终删除了通用代码并且工作正常。

答案 2 :(得分:0)

我也有同样的问题(在VB中)。我发现你可以使用泛型参数,但它是错误的,因为MyEntityObjectSubClass类型在另一个程序集中。如果删除泛型参数的类型限制,它将正常工作。

我认为这是框架本身的一个错误。我已向microsoft提交了反馈票。我附上了一个VB.net

答案 3 :(得分:0)

我意识到这是一个较旧的问题但是为了后人的缘故,将.dll引用上的CopyLocal参数设置为True。