将x86平台更改为任何CPU for .NET 3.5会抛出COMException

时间:2015-06-08 20:21:54

标签: c# comexception target-platform

我正在尝试将C#应用程序的平台目标从x86更改为任何CPU。我的应用程序使用_click方法运行一个新线程,该方法使用以下方法打开查看器窗口以显示窗口:

public void Show(string url, int entityId, string sessionId, int projId, string docId)
{
    base.Show();
    try
    {
        this.DocViewer.InitComm(url, entityId, sessionId, projId, docId);
    }
    catch (Exception ex)
    {
        Logger.Error("Error opening viewer", ex);
        throw;
    }
}    

在x86平台上运行时,应用程序可以正常运行。我将平台更改为“任何CPU”并收到“COMException未处理”错误:“未注册类(HRESULT异常:0X80040154(REGDB_E_CLASSNOTREG))”突出显示:

base.Show();

我已经研究了这个错误的原因,它似乎是由于registry redirection。因为我使用的是.NET 3.5,所以我无法使用我发现的许多解决方案,包括来自this thread的解决方案。我不清楚信息here如何有用,因为代码的许多链接都是用C ++编写的。

如果有人能为我提供见解,我将非常感激。

1 个答案:

答案 0 :(得分:4)

这是一次完全正常的事故。很明显,您依赖于COM服务器,他们非常关心您的程序是以32位还是64位模式运行。 COM服务器是用本机代码编写的,通常是C ++,在64位模式下需要不同风格的本机代码。

如果它是Windows的一部分而且不是太旧,那么你只能拥有这种COM服务器的64位版本。但绝大多数是第三方产品,仅作为32位版本提供。如果它是你自己的那么你将不得不构建它的x64版本,如果它是第三方,那么你将不得不使用电话。我们无法帮助您找到该号码。如果您需要提示,请查看项目的程序集引用并查看文件的属性,您可以在版权声明中看到供应商名称。