C# 如何在vs2010中为64位版本的office开发Microsoft office word加载项

C# 如何在vs2010中为64位版本的office开发Microsoft office word加载项,c#,com,vsto,office-interop,office-addins,C#,Com,Vsto,Office Interop,Office Addins,我在vs2010中为word开发了一个加载项。它在32位版本的office中运行很酷,但在64位版本的office中不起作用。搜索了很多,发现了这一点 For 64-bit Root\Software\Microsoft\Office\application name\Addins\add-in ID For 32-bit Root\Software\Wow6432Node\Microsoft\Office\application name\Addins\add-in ID 注册表信息路径的。

我在vs2010中为word开发了一个加载项。它在32位版本的office中运行很酷,但在64位版本的office中不起作用。搜索了很多,发现了这一点

For 64-bit Root\Software\Microsoft\Office\application name\Addins\add-in ID
For 32-bit Root\Software\Wow6432Node\Microsoft\Office\application name\Addins\add-in ID
注册表信息路径的。我尝试注册64位的信息。即使在64位的office中也不起作用。在64位office中,我的加载项显示在非活动应用程序加载项下。我甚至尝试启用它

如何为64位office开发和部署加载项

我得到了以下错误

无法加载文件或程序集“xxxxx,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序

**************例外文本************** System.BadImageFormatException:无法加载文件或程序集“xxxxx,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。 文件名:“xxxxx,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”

在 Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.ExecuteBase(执行阶段 执行阶段)在 Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.Microsoft.VisualStudio.Tools.Office.Runtime.Interop.IExecuteCustomization2.ExecuteEntryPoints() 警告:程序集绑定日志记录已关闭。要启用程序集绑定 记录失败,请设置注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)到1。注:有 某些性能损失是否与程序集绑定失败相关 登录中。要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]

请看MSDN中的文章,其中详细描述了所有必需的步骤。它声明如下:

32位

  HKEY_LOCAL_MACHINE\SOFTWARE(32-Bit)\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn
64位

 HKEY_LOCAL_MACHINE\SOFTWARE(32-Bit)\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn
 HKEY_LOCAL_MACHINE\SOFTWARE(64-Bit)\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn
64位Windows安装程序需要两个注册表路径,因为用户可以在运行64位Windows的计算机上运行32位和64位版本的Office

但您可以检测(在自定义操作中)已安装的MS Office的位,并在适当的配置单元中创建密钥

试图加载格式不正确的程序

在99%的情况下,当在64位程序中引发此异常时,这只意味着一件事。“格式不正确”是包含32位代码的DLL。这无法工作,64位程序只能加载64位DLL

如果您使用C#编写该加载项,那么这是一个非常简单的修复。在“解决方案资源管理器”窗口的“属性”、“生成”选项卡中的项目上单击鼠标右键。将“平台目标”设置为AnyCPU。如果您看到“首选32位”复选框(VS2012及以上),请取消选中该复选框。对发布配置重复此步骤


其他可能的解释,不寻常的情况:

  • 未安装64位版本的.NET Framework
  • 在用C++/CLI语言编写代码时,必须构建x64版本
  • 依赖于32位非托管DLL
  • 意外加载了错误的DLL

您将需要SysInternals的进程监视器来追踪此类灾难。跟踪显示Office程序正在查找哪些DLL,以及在哪些目录中查找DLL。这将是一个大的跟踪,从跟踪的底部向后工作。

我想您可能有点困惑,因为Wow64是用于32位应用程序的向后兼容性。检查以下内容-检查点1、2、3、4和7@JeremyThompson但是现在我已经在Root\Software\Microsoft\Office\application name\Addins\addin ID中获得了Office addin的注册表详细信息,它在32位的Office中非常适合我,但在64位的Office中它不工作(启用GettingBG)。。?可能有什么问题…?你在同一台电脑上有两个版本的Office吗?@Jeremythonpson没有我有32位版本,在我的系统中工作正常。但是朋友有64位版本的Office,而加载项在他的系统中不工作(您需要澄清“不起作用”的含义),例如,它在Word加载项中列出或未列出,它已列出但未加载/显示,等等。另外,请提供一些注册表项的ProcessMonitor日志,以显示加载项正在读取的内容或至少加载项在注册表中的查看位置。此外,请遵循此指南,您所做的一切都是正确的:您共享的链接s基于instaSheild,但我使用的是WIX installer。文章不错,幸运的是他有VS2010,其中有安装项目。+1在左上角有一个链接,可以将文章切换到VS2010。请参阅。@EugeneAstafiev甚至在这两个路径中输入了注册表值。。尽管64位office的加载项不起作用。
 HKEY_LOCAL_MACHINE\SOFTWARE(32-Bit)\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn
 HKEY_LOCAL_MACHINE\SOFTWARE(64-Bit)\Microsoft\Office\Excel\Addins\SampleCompany.ExcelAddIn