实际上有点标题党了哈,但实际上这个bug从.net 2.0一直到现在都是存在的,而且m$也从来没有真正解决过,先看段测试代码
namespace TestMDA
{
class Program
{
static void Main(string[] args)
{
People p = new People()
{
Age = 1,
Name = "Michael"
};
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
{
Console.WriteLine(e.Name);
return null;
};
using (FileStream fs = new FileStream("test.txt", FileMode.Create))
{
XmlSerializer xs = new XmlSerializer(typeof(People)); //throw MDA binding fail here
xs.Serialize(fs, p);
}
Console.ReadLine();
}
}
public class People
{
public int Age { get; set; }
public string Name { get; set; }
}
}
上面这段代码无论通过VS05抑或VS08编译之后,运行都会输出
TestMDA.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
TestMDA.XmlSerializers
但是实际上序列化依然可以照常进行……
更诡异的事实是,如果修改相对应的namespace,例如 namespace ABC {…},就会输出
ABC.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
ABC.XmlSerializers
----------------------- 分割线------------------------
为什么提到这个话题呢?我们现在进行着的一个项目中某些代码使用了XML序列化方式,随着程序的运行就会看到类似上面这种日志……苦思不得结果,找遍了引用程序集也没看到对应的dll或exe,想想既然无大碍就暂时没去深究,不过这几天刚好项目要做一个部署分发,在测试时刚好也发现类似问题,遂google之,发现2007年帖子一枚
m$的说法是这个是by design的,不过直到现在.net 3.5也有这毛病,我也就不奢望啥了…
ps.当时应该是beta版本的VS,遇到这种情况会抛出异常,还好现在不会抛异常,但是也很郁闷 :)