80040154错误 - interop.outlook.namespace类未注册 - CLSID = {0006308B-0000-0000-C000-000000000046}

问题描述:

我正在使用visual studio 2010 vb。使用.net添加了对microsoft.office.interop.outlook的引用type = .net version 12.0.0.0 copy local = false path = ... microsoft visual studio 10.0 /../ pia/office1280040154错误 - interop.outlook.namespace类未注册 - CLSID = {0006308B-0000-0000-C000-000000000046}

使用regasm。 exe microsoft.office.interop.outlook.dll我已注册该程序集。 使用/ regfile选项我查看了内容。它无法找到的CLSID(CLSID = {0006308B-0000-0000-C000-000000000046})不在此regfile中。我会认为它应该是。 MSDN网站上的此ClassID将我带到Office 2010 Outlook.Namespace类。对于Office 2007,不会列出clSID。

在GAC中有microsoft.office.interop.outlook.dll版本12.0.0.0已注册。

当我运行我的应用程序时,我得到了上面的运行时异常。

我需要做些什么来解决这个问题。

+0

是,它是一个办公室2010(版本14)特定的CLSID,我也没有。当您使用版本12互操作库时,最终引用它的方式对我来说是个谜。但是,您不应该在interop文件上运行regasm,从而导致PIA注册失败。 – 2010-12-15 01:34:27

避免出现错误版本的Office dll问题的最简单方法是使用后期绑定,以便它不引用任何特定版本的dll。

有一些缺点,您不能使用Office对象模型中的实际类型,因此不会使用自动化对象的Intellisense,并且如果您已经编写了所有必须的代码改变你的代码,但根据你的情况它可能是值得的。

下面的文章介绍早期和后期绑定之间的差异,并具有用于每个样本的代码:How To Use Visual Basic .NET for Binding for Office Automation Servers

可以可能击中32位< - > 64位壁。

  • 操作系统可以是32位或64位Office
  • 2010可以是32位或64位
  • 和您的过程可以是“任何CPU”或32位或64位。

所以你要确保所有这些是一致的。例如,如果操作系统是64位,Office是32位,而您的应用程序是“任何CPU”,则可能会出现此错误。 (也许Office 2010实际上支持...)

我发现了这个问题。当它刚刚被声明时,我正在实例化名称空间。 具体来说:

进口的Outlook = Microsoft.Office.Interop.Outlook 昏暗的myapp作为Outlook.Application =新Outlook.Application 昏暗NS =新outlook.NameSpace NS = myapp.getNameSpace( “MAPI”)

当我把它改成下面我运行时错误消失了,它跑罚款:

昏暗的myapp作为Outlook.Application =新Outlook.Application 昏暗的NS = myapp.GetNamespace( “MAPI”)