【问题标题】:Outlook 2007 plugin failing to load (incorrect runtime)Outlook 2007 插件无法加载(运行时不正确)
【发布时间】:2012-05-18 14:20:53
【问题描述】:

我创建了一个 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 年主要互操作程序集。

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

【问题讨论】:

    标签: .net vsto outlook-addin office-2007


    【解决方案1】:

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

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

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

    <configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
      </startup>
    </configuration>
    

    【讨论】:

    • 感谢您的建议。 @Hans Passant:我尝试创建一个 outlook.exe.config 文件并将其放在与 outlook.exe 和 outlook.exe.manifest 相同的目录中,这是office12 目录。我仍然遇到同样的问题。我每次在注册表中将 LoadBehavior 设置为 3,因为当我尝试打开 Outlook 时,它会将其设置回 2。
    • 日志说:LOG: Where-ref bind. Location = C:\Program Files\Microsoft\Setup1\TestAddIn.dll LOG: Appbase = file:///C:/Program Files/AddInSpy/ LOG: Initial PrivatePath = NULL Calling assembly : (Unknown). === LOG: This is an inspection only bind. LOG: No application configuration file found. LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config. LOG: Attempting download of new URL file:///C:/Program Files/Microsoft/Setup1/TestAddIn.dll. ERR: Failed to complete setup of assembly (hr = 0x8013101b). Probing terminated.
    • 主机:Outlook,运行:FALSE,加载:FALSE,类型:VSTO,FriendlyName:测试插件友好名称,ProgID:MyTestAddin,CLSID:n/a,清单:C:\Program Files\ Microsoft\Setup1\TestAddIn.vsto|vstolocal, DllPath: C:\Program Files\Microsoft\Setup1\TestAddIn.dll, LoadBehavior: 3, RegHive: HKCU, AssemblyName: ?, CLR_version: ?, Exposed: FALSE, Interfaces: ?, FormRegions: ?, VSTOR: 2008, Installed: ?, PubVer: n/a, Status: Alert
    • LOG:未找到应用程序配置文件。
    • 是的,但我不认为这是必要的。它说使用 machine.config ,默认为当其他配置不存在时。它正在寻找 .NET 2.0.50727 的文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2013-07-04
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多