问题 两台不同计算机上的不同Interop引用不起作用


当我添加一个引用 的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>

团队中还有另一个开发人员遇到错误并需要将一个DLL文件添加到名为Interop.Excel.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>

这适用于我的电脑。

能否请您解释两种方法之间的差异,哪种方法最好,以及如何让第一种方法在其他计算机上运行?


5684
2017-10-22 01:41


起源



答案:


我也没有看到你的方法有问题。

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

<WrapperTool>primary</WrapperTool>

表示使用此PIA。

如果您正确添加了PIA参考号 CopyLocal 该引用的属性应设置为false和 路径 财产应该是这样的

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

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

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

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

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


12
2017-11-25 12:01



另请注意,PIA包含额外的粘合代码,可避免在使用生成的互操作程序集时可能发生的内存/资源泄漏。 - David Schmitt
我如何确保使用PIA而不是生成的互操作。我相信我看到@David Schmitt的评论中提到的内存/资源泄漏 - mindless.panda
@ user260197:PIA应该正确安装在系统上。您可以从Microsoft获得将处理安装的设置。特别重要的是,PIA属于GAC和 注册。查看详细信息 msdn.microsoft.com/en-us/library/aa679806%28office.11​​%29.aspx - Dirk Vollmar


答案:


我也没有看到你的方法有问题。

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

<WrapperTool>primary</WrapperTool>

表示使用此PIA。

如果您正确添加了PIA参考号 CopyLocal 该引用的属性应设置为false和 路径 财产应该是这样的

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

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

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

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

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


12
2017-11-25 12:01



另请注意,PIA包含额外的粘合代码,可避免在使用生成的互操作程序集时可能发生的内存/资源泄漏。 - David Schmitt
我如何确保使用PIA而不是生成的互操作。我相信我看到@David Schmitt的评论中提到的内存/资源泄漏 - mindless.panda
@ user260197:PIA应该正确安装在系统上。您可以从Microsoft获得将处理安装的设置。特别重要的是,PIA属于GAC和 注册。查看详细信息 msdn.microsoft.com/en-us/library/aa679806%28office.11​​%29.aspx - Dirk Vollmar


我使用的Excel自动化方式比我想要的更多,而且我从未引用过Interop.Excel.dll。我总是引用前者。他为什么要引用那个,以及他得到了什么错误?

你们是否引用了相同版本的excel(5.0版本11.0)?你们有完全相同版本的办公室,服务pakcs和所有?这可能是差异。


0
2017-10-22 01:55





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


0
2017-11-25 12:16