我创建了一个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.
我构建了一个精简的Addin,它只是弹出一个消息框,说它已经启动,所以我新建它不是我的插件所依赖的任何其他依赖项,并且我收到相同的错误消息。
我怀疑'这个程序集是由比当前加载的运行时更新的运行时构建的,无法加载。'是罪魁祸首,因为稍后在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年主要互操作组件。
所以我想我的问题是: 为什么要尝试使用.NET2? 我如何使用.NET4? 以及如何确保我的安装程序使用正确的版本?
答案 0 :(得分: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>