我们最近开始看到FileNotFoundException在反序列化XML时偶尔被抛出.消息是无法找到用于从XML映射到代码的临时程序集.从这个文档看起来,当.NET Framework无法创建此文件时会发生这种情况(但是即使在内部异常中也没有捕获到这个原因).
这是一个例外:
Type : System.IO.FileNotFoundException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Could not find file 'C:\Documents and Settings\user\Local Settings\Temp\c5_nfoko.dll'.
Run Code Online (Sandbox Code Playgroud)
每个错误的文件名都不同,但错误始终相同,它来自此处(底部的完整调用堆栈):
at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type)
Run Code Online (Sandbox Code Playgroud)
当CSharpCodeGenerator试图生成程序集时.我们多年来一直在生产中使用这些代码,而且非常稳定.它刚开始在上周左右失败了.我们想知道它是否与最新的Microsoft安全补丁有关,因为它会影响我们在多个操作系统(XP和Server 2003)上的.NET 2.0和.NET 4.0代码版本.
错误是零星的,再次运行该过程通常会导致它消失.这是一个单线程命令行应用程序,它检索文件并将它们插入到数据库中.
我找不到其他人有同样的问题,但它并没有被隔离到相同的代码行,我们有几个地方使用System.Xml.Serialization代码,我们已经看到了每个错误.这段代码也不是我们最近改变的.
我能找到的最接近的其他帖子就是这个.
在我们的QA VM上没有病毒扫描程序,因此我不认为这是一个问题.我们在托管环境和单独的客户端站点中也看到了这个问题.
我们尝试过:
如果有人有任何想法或建议会有所帮助.
完整的callstack:
Type : System.IO.FileNotFoundException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Could not find file 'C:\Documents and Settings\user\Local …Run Code Online (Sandbox Code Playgroud) 我一直在努力学习更多关于使用Lamba表达式树的知识,因此我创建了一个简单的例子.这是代码,如果作为C#程序粘贴,这可以在LINQPad中使用.
void Main()
{
IEnumerable<User> list = GetUsers().Where(NameContains("a"));
list.Dump("Users");
}
// Methods
public IEnumerable<User> GetUsers()
{
yield return new User{Name = "andrew"};
yield return new User{Name = "rob"};
yield return new User{Name = "chris"};
yield return new User{Name = "ryan"};
}
public Expression<Func<User, bool>> NameContains(string namePart)
{
return u => u.Name.Contains(namePart);
}
// Classes
public class User
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
无法从用法中推断出方法'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.
但是如果我用main替换main中的第一行:
IEnumerable<User> list = GetUsers().Where(u => u.Name.Contains("a"));
Run Code Online (Sandbox Code Playgroud)
它工作正常.可以告诉我,我做错了吗?
我有一个简单的WinForms应用程序,用于输入测试用例.自从我将此应用程序升级到.NET 4.0并向标签页控件添加了一个新的标签页以便针对XSD架构验证XML之后,应用程序一直在随机崩溃.我一直无法重现异常.
我的QA人收到的错误是通用的Windows消息:
TestCaseViewer遇到问题,需要关闭.我们对造成的不便很抱歉.
为了尝试找到真正的错误,我将以下代码添加到Main方法的开头:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += Application_ThreadException;
Run Code Online (Sandbox Code Playgroud)
事件处理程序如下所示:
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
MessageBox.Show(e.Exception.ToString(), @"Thread Exception",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
Application.Exit();
}
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
var ex = (Exception)e.ExceptionObject;
MessageBox.Show(ex.ToString(), @"Unhandled Exception",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
Application.Exit();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这没有任何帮助,无论如何,错误继续以一种产生未处理的错误的方式继续这样做,这种错误正在冒泡到操作系统.
任何人都可以给我任何关于捕获此异常的其他想法吗?
我正在使用C#.NET 3.5 ...我一直在努力通过将数据库相关活动移动到单独的工作对象来解耦BLL对象.worker对象将实体添加到数据库,并将事件成功或失败消息添加回BLL对象.
当我在BLL中实例化worker对象时,我连接了worker的事件并使用事件+ = delegate(eventhandler)语法设置BLL的事件处理程序.
我听说如果我没有使用 - =语法显式地取消监听器,那么当工作者被处置时可能存在内存泄漏.
所有这些处理都发生在一个Windows服务中,该服务从队列中获取消息并调用相应的BLL对象......我担心我可能会在此过程中引入内存泄漏.
.net ×2
c# ×2
events ×1
exception ×1
expression ×1
ienumerable ×1
linq ×1
memory-leaks ×1
tree ×1
unhandled ×1
winforms ×1