问题描述
当我尝试运行下面的code(两个独立的组件)
When I try to run the following code (two separated assemblies)
public interface ITest
{
}
的Program.cs
using System;
public class TestClass
{
public void Test<T>(T x) where T : ITest { }
}
static class Program
{
static void Main(string[] args)
{
new System.Xml.Serialization.XmlSerializer(typeof(TestClass));
}
}
编译在Windows 7中使用以下命令64位:
Compiled in Windows 7 64-Bit using the following commands:
C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ CSC /目标:图书馆ClassLibrary.cs
C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ CSC /reference:ClassLibrary.dll Program.cs的
c:\Windows\Microsoft.NET\Framework\v2.0.50727\csc /reference:ClassLibrary.dll Program.cs
我收到此异常:
System.InvalidOperationException:无法生成临时类 (结果= 1)。错误CS0012:类型 ITEST是在装配定义 未被引用。您必须添加一个 参照装配ClassLibrary, 版本= 0.0.0.0,文化=中立, 公钥=空hinzu。
在 System.Xml.Serialization.Compiler.Compile(议会 父母,串NS, XmlSerializerCompilerParameters xmlParameters,证据证据)
在 System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping [] xmlMappings,类型[]类型,字符串 DefaultNamespace的,证据证据, XmlSerializerCompilerParameters 参数,装配组装, 哈希表组件)在 System.Xml.Serialization.TempAssembly..ctor(XmlMapping [] xmlMappings,类型[]类型,字符串 DefaultNamespace的,字符串的位置, 证据证据)在 System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping,类型类型,字符串 DefaultNamespace的)在 System.Xml.Serialization.XmlSerializer..ctor(类型 类型,字符串defaultNamespace)在 Program.Main(字串[] args)
at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace) at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace) at Program.Main(String[] args)
删除的其中T:ITEST 的距离的的TestClass 的或不使用泛型在所有(如使用的公共无效测试(ITEST X)的)会prevent异常被抛出,但我需要这个结构在我的实际应用。
Removing the where T : ITest from TestClass or not using generics at all (e.g. using public void Test(ITest x)) will prevent the exception from being thrown but I need this construct in my real application.
不要任何人明白为什么XmlSerializer的无法处理的限制在哪里?
Do anybody understand why the XmlSerializer is unable to handle the where constraint?
推荐答案
我觉得你是倒霉的。下面是微软对这个问题的反应:
I think you are out of luck. Here's the response from Microsoft about this issue:
感谢您提出这个问题。 不幸的是,我们已经决定, 将不会因为风险寻址 的价值上超过它的好处的修补程序。通过 当时的下一个机会,使 这种变化来一下,希望 该新的串行化 技术的未来版本 Windows通讯基础 将针对您的情况。如果这 问题是造成显著负 对业务的影响,请联系 Microsoft产品支持服务。一世 很遗憾,我们无法提供 更高的分辨率。请放心, 我们认真考虑过这个问题 - 一 不会修复决策从来都不是容易 令。
这基本上是说,你应该使用 DataContractSerializer的,而不是 XmlSerializer的或更改对象结构。
This basically says the you should use DataContractSerializer instead of XmlSerializer or change your object structure.
这篇关于XmlSerializer的是使用泛型类型的限制就是当抛出InvalidOperationException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!