【问题标题】:How to select .NET framework version running from Excel?如何选择从 Excel 运行的 .NET 框架版本?
【发布时间】:2009-04-26 09:54:56
【问题描述】:

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

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

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

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

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

欢迎任何想法。我想知道 DLL 中的一层非托管(非 .NET)代码是否可以工作。一些关于如何做到这一点的建议或一些更简单的替代方案将不胜感激,因为这很重要。

相关:

.NET app.config question

【问题讨论】:

  • 我们最终通过升级到 .NET 4.0 完全解决了这个问题。 Excel 对 .NET 4 的行为与对 2 的行为不同。

标签: .net excel


【解决方案1】:

以下文章对这个问题非常详尽。 http://mcfunley.com/331/a-real-head-scratcher-courtesy-the-clr-and-office-teams 。我认为 .NET 4.0 将是那些有选择权的人的救星。

【讨论】:

    【解决方案2】:

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

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\AppPatch\v2.0.50727.00000\excel.exe
    

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

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

    【讨论】:

    • 感谢蒂姆的回复。不幸的是,如果我们的客户发现我们更改了注册表,他们将不会让我们/高兴。复制和重命名 Excel 二进制文件会遇到我们在将二进制文件复制到我们自己的目录时遇到的相同问题,因为这会在安装时产生问题。
    【解决方案3】:

    Microsoft 发布了一个补丁,应该为每个使用该插件的用户安装该补丁。您可以在此处获取补丁:

    http://support.microsoft.com/kb/908002

    .NET app.config question

    【讨论】:

    • 谢谢,迪沃。这是我可以告诉客户在不破坏他们的 v1.1 应用程序的情况下做的事情。
    猜你喜欢
    • 2011-03-16
    • 2011-04-03
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多