【问题标题】:Is there a way to control excel to load the addins ? (useLegacyV2RuntimeActivationPolicy issue)有没有办法控制excel加载插件? (使用LegacyV2RuntimeActivationPolicy 问题)
【发布时间】:2011-11-22 22:00:47
【问题描述】:

我陷入了一个真正混乱的局面。

场景: 我有一个调用 .NET 4.0 库(通过 ExcelDna)的 Excel 自动化 VBA 加载项。这个 4.0 库调用了 2.0 混合模式库中的一些方法。因此必须将 'BindAsLegacyV2Runtime' 设置为 4.0 CLR。我在 4.0 库中设置了这个,当 excel 实例化这个库时,CLR 加载这个属性集并且一切正常。(参见这个link)。我无法修改 excel.exe.config,因为它在生产机器中被拒绝。

我从一个批处理文件启动 excel 进程并将我的插件加载为:

Start Excel.exe my4.0addin.xla

问题: 发现这在少数用户机器上不起作用并调查了这个问题,发现 excel 在加载作为参数传入的插件之前首先在机器中加载预安装的插件。 因此,在加载 4.0 加载项之前,excel 正在加载 2.0 CLR,因为有一些其他加载项。 因此属性设置失败,逻辑进行了折腾。

我无法修改 excel.exe.config(将属性添加到配置)或注册我的插件,因为这两者都需要用户计算机上的管理员权限,而这在我的环境中是不可能的。

因此,有没有办法控制 excel 加载插件或任何方式来完成这项工作?

【问题讨论】:

  • 请与您的主管讨论此事,我们无法帮助您更改公司政策。
  • Hans - 你认为你的评论对世界上任何人都有用吗?
  • 也许你在尝试了一个月但一无所获之后会更加感激它。时间会证明一切。

标签: .net excel vba clr excel-dna


【解决方案1】:

最简单的方法是将混合模式程序集重新编译为目标 .NET 4。

比较冒险的是弄清楚 .NET 目标版本是如何存储在混合模式程序集中的,并适当地编辑二进制文件。

【讨论】:

  • 是的,这将是最简单的解决方案。但不幸的是,它是第三方拥有的二进制文件,无法控制它。第二个想法很有趣,不确定是否可行,但可以尝试一下。
【解决方案2】:

这是我得到这个工作的一种方式。可能对某人有用。

我编写了一个 WCF 服务来公开我的 4.0 功能。这是在 .NET 4.0 (4.0 CLR) 中。

我编写了一个 2.0 客户端,它通过生成的代理使用 wcf 服务。这是在 .NET 3.5 中。 (2.0 CLR)。然后我通过插件将其转换为 .NET 3.5 并使用了这个也在 .NET 3.5 中的客户端 在插件中,我现在可以直接使用 2.0 混合模式程序集,还可以通过 wcf 服务访问 4.0 功能。

因此我避免了绑定属性并设法将我的插件保留在 2.0 中。

【讨论】:

    猜你喜欢
    • 2019-01-08
    • 2010-10-11
    • 1970-01-01
    • 2012-06-11
    • 2019-10-22
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多