我希望有人能帮助我解决我在XmlSerializer上遇到的这个问题。
我已经浏览过这个线程:http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/551cee76-fd80-48f8-ac6b-5c22c234fecf/
我得到的错误是:
System.InvalidOperationException:无法生成临时类(result=1)。错误'System.Data.Objects.DataClasses.EntityObject‘:类型CS0012是在未引用的程序集中定义的。必须添加对程序集'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 再一次,任何想法都会很棒。
发布于 2009-02-12 18:08:45
最后,我删除了通用代码,它运行得很好。
发布于 2009-02-12 06:52:35
如果您没有在编译时需要引用的任何代码,那么该引用将不会包含在构建的程序集中。您可以使用像反射器这样的工具来检查引用是否正在进入程序集中。
您可以尝试的一件事是向WantToSerialize中添加一个创建XmlSerializer的静态方法。包含WantToSerialize的程序集必须对EntityObject有一个很好的引用,所以这应该可以解决问题。
发布于 2011-05-17 19:03:02
我也有同样的问题(在VB中)。我发现您可以使用泛型参数,但是它会出错,因为MyEntityObjectSubClass类型位于另一个程序集中。如果删除对泛型参数的类型限制,它将正常工作。
我认为这是框架本身的一个错误。我已经向微软提交了一张反馈票。我附上了一个VB.net
https://stackoverflow.com/questions/540100
复制相似问题