Когда я пытаюсь запустить следующий код (две отдельные сборки)
ClassLibrary.cs
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));
}
}
Скомпилировано в 64-разрядной версии Windows 7 с использованием следующих команд:
c: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ csc / target: library ClassLibrary.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, Культура = нейтральная,
PublicKeyToken = null hinzu.
в
System.Xml.Serialization.Compiler.Compile (Собрание
родитель, строка нс,
XmlSerializerCompilerParameters
xmlParameters, Доказательства)
в
System.Xml.Serialization.TempAssembly.GenerateAssembly (XmlMapping []
xmlMappings, Type [] types, String
defaultNamespace, Доказательства,
XmlSerializerCompilerParameters
параметры, сборка сборки,
Hashtable сборки) в
System.Xml.Serialization.TempAssembly..ctor (XmlMapping []
xmlMappings, Type [] types, String
defaultNamespace, расположение строки,
Доказательства доказательства) на
System.Xml.Serialization.XmlSerializer.GenerateTempAssembly (XmlMapping
xmlMapping, Type type, String
defaultNamespace) в
System.Xml.Serialization.XmlSerializer..ctor (Тип
тип String defaultNamespace) в
Program.Main (String [] args)
Удаление , где T: ITest из TestClass или не использование универсальных шаблонов вообще (например, использование public void Test (ITest x) ) предотвратит исключение от того, чтобы быть брошенным, но мне нужна эта конструкция в моем реальном приложении.
Кто-нибудь понимает, почему XmlSerializer не может обработать ограничение where?