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

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

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

我从一个batch file开始excel进程,并加载我的插件:

Start Excel.exe my4.0addin.xla 

问题:发现这不适用于less数用户机器,并调查了这个问题,发现Excel在加载作为参数传入的插件之前,先在机器中加载了预先安装的插件。 因此,在4.0加载项加载之前,excel因为其他加载项而加载了2.0 CLR。 因此,这个属性是不能设置的,逻辑就是抛弃。

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

因此,有没有办法控制Excel的加载或任何方式使这项工作?

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

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

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

我写了一个WCF服务,公开我的4.0function。 这是在.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.0function。

因此,我避免了绑定属性,并设法让我的插件在2.0。