如何选择从Excel运行的.NET框架版本?

mik*_*may 2 .net excel

除了将excel.exe.config文件添加到Office二进制文件夹之外,如何指定Excel在运行.NET dll时使用.NET framework 2.0版?

我们的应用程序在Excel中运行,并使用VBA调用.NET程序集中的托管代码.我相信教科书的方法是将excel.exe.config添加到Office二进制目录,其中包含:

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这个选项对于我们的客户来说是不可接受的,首先是因为他们根本不允许我们将文件添加到Office目录中,即使他们这样做了,我们也不会冒险使用.NET v1.1破坏某些应用程序,这是Excel的默认选择.

我们认为可行的解决方案是将Excel.exe文件从客户端的Office目录复制到我们自己的应用程序目录,在那里添加配置文件并执行该文件.它运行良好,但我们遇到严重的安装问题,安装脚本无法找到正确版本的Excel.此外,它首先是一个讨厌的kludge.

任何想法都会受到欢迎.我想知道DLL中的一层非托管(非.NET)代码是否可行.关于如何做到这一点或一些更简单的替代方案的一些建议将被理解,因为这是非平凡的.

有关:

.NET app.config问题

Tim*_*son 8

配置为Excel选择的运行时版本的另一种方法是更改​​以下注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\AppPatch\v2.0.50727.00000\excel.exe
Run Code Online (Sandbox Code Playgroud)

默认情况下,此键强制Excel使用1.1框架; 删除它(或重命名)会导致Excel加载可用的最新版本.

如果您担心在Excel中破坏.NET 1.1,那么您可能必须最终运行第二个重命名的excel.exe副本..NET框架只能在给定的Windows进程中加载​​一次,因此在excel.exe的单个实例中,您必须在1.1,2.0或更高版本之间进行选择.