我正在处理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,Pointersize为4。

不知道这是什么时候的区别。我在拉屎的时候是不是漏了什么东西。请告诉我如何将转储加载到CLRMD中。
提前谢谢。
发布于 2016-10-06 14:24:44
这是一个非常直截了当的错配,您的程序运行为32位进程,但是最小进程是从64位进程创建的。DAC不支持混合。
您必须消除抖动强制,以便您的程序运行作为一个64位的进程。Project > Properties > Build选项卡,将Platform目标设置更改为AnyCPU并取消选中“偏好32位”复选框。重复发布配置。
请注意,解决方案平台名称与此设置无关,这可能是您的测试控制台应用程序被证明是64位进程的原因,尽管您认为它是针对x86的。您可以重复检查任务管理器、详细信息选项卡,添加"Platform“列。
https://stackoverflow.com/questions/39822688
复制相似问题