1

我陷入了一个真正混乱的境地。

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

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

Start Excel.exe my4.0addin.xla

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

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

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

4

2 回答 2

2

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

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

于 2011-11-07T19:57:14.843 回答
0

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

我编写了一个 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 中。

于 2011-11-22T14:00:47.500 回答