有没有办法控制excel加载插件? (useLegacyV2RuntimeActivationPolicy问题)

时间:2011-11-07 16:52:44

标签: .net excel vba clr excel-dna

我陷入了一个非常混乱的境地。

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

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

Start Excel.exe my4.0addin.xla

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

这是我开展这项工作的一种方式。可能对某人有用。

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

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

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