4

语言:C#

运行时:.NET 4 客户端

问题:在大约 14 分钟发生垃圾收集(如诊断工具中所示)时,此时会立即出现异常并显示以下信息:

在 Test.exe 中的 0x163BA480 处引发异常:0xC0000005:执行位置 0x163BA480 的访问冲突。

我的程序引用了第三方程序,旨在通过插件添加其他功能。

我的程序由程序集组成:

  1. 我的主程序从 .cs 文件编译附加程序集,在 WPF 窗口中显示它们的名称。
  2. 仅处理日志记录的辅助项目,是同一解决方案的一部分。
  3. 负责加载插件的附加项目,是同一解决方案的一部分。
  4. 任意数量的加载插件程序集。

所有程序集都加载到同一个 Appdomain 中。最终,这将被更改,以便每个程序集都在它自己的 Appdomain 内。

在这种特定情况下,插件程序集是一个简单的类定义,没有其他执行代码/方法,即:

using System;
using Interface;
namespace TestAddin
{
    public class TestAddin
    {
    }
}

输出:

程序成功运行,加载程序集并显示它们。

然后程序执行第三方程序(通过引用 dll 中的 Run() 方法)

程序又成功执行了约 14 分钟,直到发生前面提到的异常。

我不知道如何调试这个,我怎么知道异常发生在哪里?我编写的三个项目都没有使用非托管代码,并且引用的程序集在 C# 中运行,我找不到使用 dotpeek 的非托管代码。

任何帮助将不胜感激,如果需要任何进一步的信息,我很乐意提供。

4

0 回答 0