【问题标题】:Different Interop references on two different computers doesn't work两台不同计算机上的不同互操作引用不起作用
【发布时间】:2008-10-22 01:41:52
【问题描述】:

当我在我的计算机上添加对 Microsoft.Office.Interop.Excel 的引用时,Visual Studio 会将其添加到项目文件中:

<COMReference Include="Excel">
  <Guid>{00020813-0000-0000-C000-000000000046}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>5</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

团队中有另一位开发人员遇到错误,需要将一个名为 Interop.Excel.dll 的 DLL 文件添加到项目中,该文件将上面的代码替换为项目文件中的以下代码:

<Reference Include="Interop.Excel, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>My Project\Interop.Excel.dll</HintPath>
</Reference>

这在我的电脑上确实有效。

您能否解释一下这两种方法之间的区别,哪种方法最好,以及如何让第一种方法在其他计算机上工作?

【问题讨论】:

    标签: vb.net excel dll interop


    【解决方案1】:

    我也认为您的方法没有问题。

    通常,当您添加对组件的引用时,VS 会自动为 COM 组件生成互操作程序集。但是,当您添加对其中一个 Office 组件(XP 或任何更高版本)的引用时,会添加对 Microsoft 的预生成(和优化)主互操作程序集的引用,就像在您的第一个示例中一样。线

    <WrapperTool>primary</WrapperTool>
    

    表示使用了这个 PIA。

    如果您正确添加了 PIA 引用,则该引用的 CopyLocal 属性应设置为 false,Path 属性应类似于

    C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Excel\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll
    

    您将在此 MSDN article 中找到有关互操作程序集的更多详细信息。

    要使第一种方法正常工作,必须在计算机上安装 Office 主互操作程序集 (PIA)。 Microsoft 提供了一个可再发行版本:

    AFAIK,这些 PIA 仅在已安装 .NET Framework 时由 Office 安装程序安装,这就是为什么 PIA 有一个单独的可再发行组件。

    注意:请确保您引用了您所针对的 Office 版本。但是,当针对多个版本的 Office 时,您可能会遇到一些问题。这种情况下的解决方案可能是后期绑定(如果性能不是问题)。

    【讨论】:

    • 另请注意,PIA 包含额外的粘合代码,可避免使用生成的互操作程序集时可能发生的内存/资源泄漏。
    • 我将如何确保使用 PIA 而不是生成的互操作。我相信我看到了@David Schmitt 的评论中提到的内存/资源泄漏
    • @user260197:PIA 应该正确安装在系统上。您可以从 Microsoft 获得将处理安装的设置。尤其重要的是,PIA 已在 GAC 中并注册。详见msdn.microsoft.com/en-us/library/aa679806%28office.11%29.aspx
    【解决方案2】:

    我使用 Excel 自动化的方式比我想承认的要多,而且我从未引用过 Interop.Excel.dll。我一直提到前者。他为什么要引用它,他会遇到什么错误?

    你们是否引用了相同版本的 excel(5.0 和 11.0)?你们有完全相同版本的office、service pakcs 等等吗?这可能是不同之处。

    【讨论】:

      【解决方案3】:

      我找到了使用它的最干净的方法,这也允许多个版本的互操作,是创建一个共享 bin\Office Interop\11 或 12\Microsoft.Office.Interop.Excel.dll\ 并引用它们该项目适用于不同的版本

      【讨论】:

        猜你喜欢
        • 2016-12-03
        • 2015-05-23
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 2017-02-09
        • 1970-01-01
        相关资源
        最近更新 更多