1

我已经创建了一个 Outlook 2007 插件,我已经使用 Visual Studio 2010 中的安装项目设法将它安装在 Windows 7 上。它在我安装它的每台 Windows 7 机器上都运行良好。我之前也成功地在两台 XP 机器上安装了它,但是我在虚拟机上的一个 XP 实例上遇到了问题。

AddInSpy 显示 Outlook 无法加载此插件,因为它无法加载其依赖项之一:

Add-in DLL path is not found. System.BadImageFormatException: Could not load file or assembly 'file:///C:\Program Files\blah\blah\MyAddIn.dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

我构建了一个精简的插件,它只是弹出一个消息框,说它已启动,因此我新建了它不是我的插件所依赖的任何其他依赖项,并且我收到了相同的错误消息。

我怀疑“此程序集是由比当前加载的运行时更新的运行时构建的,无法加载。” 是罪魁祸首,稍后在 AddInSpy 生成的错误日志中我得到:

Assembly manager loaded from:  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
...
Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config

我已经安装了 .NET 4 客户端配置文件(该插件是为使用而构建的)并在这台机器上进行了扩展,但根据它尝试使用 .NET 2 的日志。我还安装了 VSTO2010 运行时和 Office 2007 Primary Interop组件。

所以我想我的问题是:为什么要尝试使用 .NET2?我如何让它使用.NET4?以及如何确保我的安装程序使用正确的版本?

4

1 回答 1

3

此程序集由比当前加载的运行时更新的运行时构建

这是核心错误信息。您正在与加载到 Outlook 中的另一个插件进行战斗,并且您输掉了比赛。它是第一个,它加载了版本 2 CLR。您的插件只能与版本 4 CLR 一起使用。

一种解决方法是删除该加载项。另一个是强制Outlook 始终加载版本 4 CLR。它具有版本 2 所没有的功能,它允许加载多个 CLR。强制执行此操作需要 Office 目录中的 Outlook.exe.config 文件。可能已经有一个(不确定),所以如果你找到它,请编辑现有的。它需要包含以下条目:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>
于 2012-05-10T05:14:24.220 回答