c#中类型为“System.IO.FileNotFoundException”的未处理异常

时间:2014-05-27 03:26:57

标签: c# c++ dll

我有一个具有C#用户界面的旧C#.NET Windows应用程序,所有处理后的代码都是通过调用C ++ dll(C ++类库项目)完成的,该项目被添加为C#项目的引用。

然而,经过很长一段时间,我正在尝试运行我的项目,该项目已备份。在visual studio 2005中运行它会产生以下异常:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in System.Windows.Forms.dll

Additional information: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

当我尝试在InitializeComponent()事件中调试以下代码(例如)时抛出此异常。

public CSPVMain(string[] args)
{
    InitializeComponent();
    ParseArgument(args);
}

然而,实际上显示异常被抛出在这一行上,即使表单被加载而没有任何问题:

Application.Run(new Form1());

除此之外,当我使用Ctrl-F5运行代码时,我收到此错误:

Description:
      Stopped working

Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01:   spvmain.exe
Problem Signature 02:   1.0.0.0
Problem Signature 03:   53840363
Problem Signature 04:   SPVMain
Problem Signature 05:   1.0.0.0
Problem Signature 06:   53840363
Problem Signature 07:   d
Problem Signature 08:   16
Problem Signature 09:   System.IO.FileNotFoundException
OS Version: 6.1.7600.2.0.0.768.2
Locale ID:  1033`

我已经安装了VMWare并以32位运行代码,但它没有用。我运行单个文件没有错误。当我试图运行整个应用程序时,我收到此错误。 我该如何解决?

2 个答案:

答案 0 :(得分:0)

尝试按步骤调试问题:

  1. 您是否能够与控制台应用程序很好地集成? (没有用户界面)
  2. 没有c ++代码,UI是否正常工作?
  3. 他们可以一起工作吗?

答案 1 :(得分:0)

该错误意味着它正在寻找一个但无法找到的DLL。我知道有两种方法可以追踪这个问题。

第一个选项,编辑程序以显示正在尝试加载的程序集,您将看到尝试加载但失败的任何DLL的名称。

    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
        Application.Run(new Form1());
    }

    private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        Debug.WriteLine("Trying to resolve:" + args.Name);
        return null;
    }

另一个选项是通过fuslogvw启用程序集绑定日志。以管理员身份打开程序并转到设置按钮,将选项设置为" Log Bind Failures"并将日志记录路径设置为稍后可以找到以清理的位置。

enter image description here

执行此操作后,运行程序并使其出错,点击刷新按钮,然后您可以查看生成的日志文件,并查看哪个程序集询问了查找失败负载的内容和位置。