2

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

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

我得到的错误是:

System.InvalidOperationException:无法生成临时类(结果 = 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

4 回答 4

0

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

您可以尝试的一件事是将创建 XmlSerializer 的静态方法添加到 WantToSerialize。包含 WantToSerialize 的程序集必须已经很好地引用了 EntityObject,所以这应该可以解决问题。

于 2009-02-12T06:52:35.600 回答
0

我最终删除了通用代码,它运行良好。

于 2009-02-12T18:08:45.930 回答
0

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

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

于 2011-05-17T19:03:02.760 回答
0

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

于 2014-07-11T16:03:10.543 回答