CLRMD 架构不匹配

CLRMD Architecture MisMatch

我正在处理 CLRMD 库并尝试加载转储。我在这个过程和 dac 之间得到不匹配的架构。控制台应用程序,它是创建字符串数组的 x86 应用程序。

static void Main(string[] args)
    {
        string[] strArray = null;

        for (int i = 0; i < 100; i++)
        {
            strArray = new string[100];
            strArray[i] = "One";
            System.Threading.Thread.Sleep(1000);
            Console.WriteLine(i); 
        }

        Console.Read();
    }

我使用 32 位 TaskManager 创建了一个转储,当我加载转储时我得到了体系结构不匹配错误。

dataTarget.Architecture 是 Amd64 和 PointerSize 8。

但是当附加相同的应用程序进程时,dataTarget.Architecture 是 x86,指针大小是 4。

不知道什么时候有这个区别。我在倒垃圾时是不是漏掉了什么?请让我知道如何将转储加载到 CLRMD

提前致谢。

这是一个非常直接的不匹配,您的程序作为 32 位进程运行,但小型转储是从 64 位进程创建的。 DAC不支持混音

您必须删除抖动强制,这样您的程序也可以作为 64 位进程运行。 Project > Properties > Build 选项卡,将 Platform target 设置更改为 AnyCPU 并取消选中 "Prefer 32-bit" 复选框。重复发布配置。

请注意,解决方案平台名称与此设置无关,这可能是您的测试控制台应用程序原来是 64 位进程的原因,尽管您认为它是针对 x86 的。您可以使用任务管理器仔细检查,详细信息选项卡,添加 "Platform" 列。