我有以下代码:
class Program
{
static void Main(string[] args)
{
string xml = @"<ArrayOfUserSetting>
<UserSetting>
<Value>Proposals</Value>
<Name>LastGroup</Name>
</UserSetting>
<UserSetting>
<Value>Visible</Value>
<Name>WidgetsVisibility</Name>
</UserSetting>
</ArrayOfUserSetting>";
List<UserSetting> settings =
GetObjFromXmlDocument<List<UserSetting>>(xml);
}
public static T GetObjFromXmlDocument<T>(string xml)
{
T customType;
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
using (XmlNodeReader xmlNodeReader = new XmlNodeReader(xmlDocument))
{
customType = (T)serializer.Deserialize(xmlNodeReader);
}
return customType;
}
}
[Serializable]
public class UserSetting
{
public string Value { get; set; }
public string Name { get; set; }
}
代码工作正常,对GetObjFromXmlDocument的调用产生了一个List集合。但是,当执行System.IO.FileNotFoundException
时,我总是在mscorlib.dll中获得XmlSerializer serializer = new XmlSerializer(typeof(T));
类型的第一次机会异常。
所以我进入了Debug / Exception并打开了Managed Debugging Assistants。我在那条线上得到了以下内容:
显示名称为“mscorlib.XmlSerializers”的程序集无法加载到ID为1的AppDomain的“LoadFrom”绑定上下文中。失败的原因是:System.IO.FileNotFoundException:无法加载文件或程序集' mscorlib.XmlSerializers,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一。该系统找不到指定的文件。 文件名:'mscorlib.XmlSerializers,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'
有人可以解释为什么会这样吗?我可以对UserSetting
课做些什么来使问题消失吗?该应用程序对性能非常敏感,我宁愿没有例外。
答案 0 :(得分:10)
XmlSerializer尝试加载 预先生成的序列化器以避免 编译序列化代码 在飞行中。没有简单的方法 检查“将组装成员 Assembly.Load()调用“,它会是 复制Fusion路径搜索和 XmlSerializer中的加载器逻辑。
当无法找到“预生成的序列化程序”时,看起来像是在XmlSerializer中抛出并处理了FileNotFound异常,这将导致生成序列化代码。
答案 1 :(得分:2)
对于我所选择的几个Visual Studio项目,这是一个烦恼,我更喜欢只为 BindingFailure 和 System.IO.FileNotFoundException 禁用break异常
在Visual Studio中:Ctl-D,Ctl-E用于“例外”对话框:
1)取消选中托管调试助手
下的BindingFailure2)取消选中公共语言运行时异常下的System.IO.FileNotFoundException。
啊,那更好: - )